鱼C论坛

 找回密码
 立即注册
查看: 5006|回复: 57

调用问题~

[复制链接]
发表于 2024-2-21 12:52:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问一下:滚动条的滚动到百分比中间需要自定义一个QProgressBar的子类来实现
# 将以下代码保存为单独的文件"CustomProgressBar.py",并在主代码中添加如下导入语句:
# from CustomProgressBar import CustomProgressBar

# 这样就可以创建自定义的CustomProgressBar控件,并调用其`scrollToCenter()`和`startAnimation()`方法了。

最后一句是什么意思?  要怎样实现?

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-2-21 12:56:14 | 显示全部楼层
FishC 发表于 2024-2-21 12:52
最后一句"这样就可以创建自定义的CustomProgressBar控件,并调用其`scrollToCenter()`和`startAnimation()` ...

好的 我试试   谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:01:25 | 显示全部楼层
清風 发表于 2024-2-21 12:56
好的 我试试   谢谢

不行 我不会代入。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:03:45 | 显示全部楼层
FishC 发表于 2024-2-21 12:52
最后一句"这样就可以创建自定义的CustomProgressBar控件,并调用其`scrollToCenter()`和`startAnimation()` ...

为什么不把滚动条代码直接写进去main程序里呢? 为什么要单独写个py来调用?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:09:24 | 显示全部楼层
FishC 发表于 2024-2-21 13:01
没关系,让我帮你具体代入一下吧。以下是完整的代码示例:


但你这段代码运行后只显示一个小小的窗体,没有看到滚动条,也没有报错....

进程已结束,退出代码为 -1073740791 (0xC0000409)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:11:21 | 显示全部楼层
FishC 发表于 2024-2-21 13:09
非常抱歉,我给出的代码有误。让我修正一下。在修正之前,请确保你已经安装了PyQt5库。

以下是修正 ...

这次有滚动条了,但百分数是在右边 ,我希望百分数是在滚动条中间.....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:13:55 | 显示全部楼层
FishC 发表于 2024-2-21 13:11
非常抱歉给你带来了困惑。要将百分数显示在滚动条中间,你可以自定义一个 QLabel,并将其放置在 QProgr ...

这次有报错了,哈哈~

Traceback (most recent call last):
  File "C:\Users\CustomProgressBar01.py", line 51, in <module>
    mainWindow = MainWindow()
                 ^^^^^^^^^^^^
  File "C:\Users\CustomProgressBar01.py", line 30, in __init__
    self.initUI()
  File "C:\Users\CustomProgressBar01.py", line 34, in initUI
    progressBar = CustomProgressBar()
                  ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\CustomProgressBar01.py", line 8, in __init__
    self.setAlignment(Qt.AlignCenter)  # 设置进度条内容居中对齐
                      ^^^^^^^^^^^^^^
AttributeError: type object 'Qt' has no attribute 'AlignCenter'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:17:24 | 显示全部楼层
FishC 发表于 2024-2-21 13:14
非常抱歉,给你带来了困惑。该错误是由于 Qt 模块中的 AlignCenter 属性已被移除,导致无法设置进度条 ...

File "C:\Users\CustomProgressBar01.py", line 41, in initUI
    label.setAlignment(Qt.AlignCenter)
                       ^^
NameError: name 'Qt' is not defined
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:18:08 | 显示全部楼层
FishC 发表于 2024-2-21 13:17
非常抱歉,我犯了一个错误。在代码中,我们需要导入`Qt`模块,以便使用其中的`AlignCenter`属性。请将 ...

回复请注意python格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:19:37 | 显示全部楼层
FishC 发表于 2024-2-21 13:18
非常抱歉,下面是经过修正的按照正确的Python格式的代码示例:

QT5总是报错,换QT6 吧?

label.setAlignment(Qt.AlignCenter)
                       ^^^^^^^^^^^^^^
AttributeError: type object 'Qt' has no attribute 'AlignCenter'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:20:21 | 显示全部楼层
FishC 发表于 2024-2-21 13:19
非常抱歉给您带来了困扰,确实在Qt6中更改了一些属性的名称和用法。在Qt6中,将`Qt.AlignCenter`改为`Q ...

回复请注意python格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:23:37 | 显示全部楼层
FishC 发表于 2024-2-21 13:20
非常抱歉没有按照Python的格式来回答您的问题。下面是按照Python的格式进行修正后的代码:

这次正常了,不过,可能 我没表达清楚,我希望百分数是镶嵌在滚动条中间,而不是放在滚动条的上面或者下面。

另外 ,我以后在别的程序中要如何引用这个滚动条(比如说引用到HuanYing窗体中),谢谢~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 13:25:45 | 显示全部楼层
FishC 发表于 2024-2-21 13:23
非常抱歉理解错误。要将百分数镶嵌在滚动条的中间,您可以使用自定义样式表来实现。下面是修正后的代码 ...

非常感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 22:10:00 | 显示全部楼层
FishC 发表于 2024-2-21 13:23
非常抱歉理解错误。要将百分数镶嵌在滚动条的中间,您可以使用自定义样式表来实现。下面是修正后的代码 ...

实在惭愧,我现有如下代码,但是实在是没有能力把滚动条引入到窗体中。。。。。

import sys
import time

from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QWidget, QApplication
from CustomProgressBar import CustomProgressBar

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        
        # 设置第四个垂直布局
        self.verticalLayoutWidget_4 = QtWidgets.QWidget(parent=Form)
        self.verticalLayoutWidget_4.setGeometry(QtCore.QRect(450, 790, 500, 20))
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_4)
        self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_4.setObjectName("verticalLayout_4")

        self.label_5 = QtWidgets.QLabel(parent=self.verticalLayoutWidget_4)
        font = QtGui.QFont()
        font.setFamily("隶书")
        font.setPointSize(18)
        self.label_5.setFont(font)
        self.label_5.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
        self.label_5.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.label_5.setObjectName("label_5")
        self.verticalLayout_4.addWidget(self.label_5)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
   
class MyForm(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
      
        self.label_5.hide()
        # self.progressBar.hide()

   
        # label_4垂直居中对齐
        label_4_height = self.label_4.height()
        label_4_y = y + (windowRect.height() - label_4_height) // 2
        self.label_4.move(self.label_4.x(), label_4_y)

   
    def connectSignals(self):
        # 连接信号和槽
        self.pushButton.clicked.connect(self.checkLogin)
        # self.pushButton_3.clicked.connect(self.adjustOptions)
        # self.pushButton_4.clicked.connect(self.showHelpForm)
        self.pushButton_2.clicked.connect(self.confirmExit)

    def checkLogin(self):
        # 检查用户名和密码
        username = self.lineEdit.text()
        password = self.lineEdit_2.text()

        # 模拟检查逻辑
        if username == "aaa" and password == "1":
            self.showSuccessMessage()
        else:
            self.showErrorMessage()

##########################
    def showSuccessMessage(self):
        msgBox = QtWidgets.QMessageBox()
        msgBox.setText("登录成功!欢迎使用本报表统计系统!")
        msgBox.setWindowTitle("成功")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("success.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        msgBox.setWindowIcon(icon)
        msgBox.exec()
        time.sleep(1)
        self.label_5.show()
##  我希望在这从0%开始显示滚动条###

        # 判断滚动条是否达到 100%
        if self.progressBar.value() == 100:
            # 打开主窗口
            mainWindow = MainWindow()
            mainWindow.show()
            self.close()  # 关闭当前窗口
        else:
            event.ignore()  # 忽略关闭事件


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        # 主窗口的初始化代码


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    myForm = MyForm()
    myForm.show()
    sys.exit(app.exec())


请问一下:究竟要怎样才能把滚动条加入进去?   

回复请注意python 格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 22:17:35 | 显示全部楼层
FishC 发表于 2024-2-21 22:11
在您的代码中,滚动条被定义为CustomProgressBar类的实例。要将滚动条添加到窗体中,您可以按照以下步 ...

这次滚动条有显示出来了(其实我是希望label_5显示之后再显示滚动条),但是没有滚动动作。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 22:20:07 | 显示全部楼层
FishC 发表于 2024-2-21 22:19
非常抱歉,我之前提供的代码遗漏了调用滚动条的方法。要实现滚动条的滚动效果,在`showSuccessMessage` ...

回复请注意python格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 22:24:54 | 显示全部楼层
FishC 发表于 2024-2-21 22:20
非常抱歉,我在上一条回复中留下了一些错误的格式。以下是修改后的代码示例:请注意,这些代码需要Pyth ...


这次有滚动条显示了,不过马上就消失了,没有看到滚动动作。。。

回复请注意python格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 22:25:54 | 显示全部楼层
FishC 发表于 2024-2-21 22:25
非常抱歉,前面的代码中确实存在一些问题。以下是修正后的代码示例:from PyQt5.QtCore import Qt, QTi ...

回复请注意python格式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 22:28:03 | 显示全部楼层
FishC 发表于 2024-2-21 22:26
非常抱歉,以下是修正后的代码示例:

你这是修改的哪个文件?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-21 22:32:16 | 显示全部楼层
FishC 发表于 2024-2-21 22:28
这是修复了格式问题的"CustomProgressBar.py"文件的代码示例。您可以将此代码保存为单独的文件"CustomP ...

但我现有的

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QLabel
from PyQt6.QtCore import QTimer, Qt

class CustomProgressBar(QProgressBar):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setStyleSheet(
            """
            QProgressBar {
                text-align: center;  /* 将文本居中对齐 */
                color: white;  /* 设置文本颜色为白色 */
                border: none;
                background-color: #909090;  /* 设置背景色 */
                height: 20px;  /* 设置进度条高度 */
            }
            QProgressBar::chunk {
                background-color: #00A3E0;  /* 设置进度条颜色 */
            }
            """
        )
        self.setTextVisible(True)  # 显示进度文本

    def scrollToCenter(self):
        max_value = self.maximum()
        if max_value > 0:
            self.setValue(max_value // 2)

    def startAnimation(self):
        self.timer = QTimer(self)
        self.timer.timeout.connect(self._animate)
        self.timer.start(100)

    def _animate(self):
        value = self.value() + 1
        if value > self.maximum():
            value = value % self.maximum()
        self.setValue(value)

class HuanYingWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QVBoxLayout(self)

        progressBar = CustomProgressBar()
        layout.addWidget(progressBar)
        progressBar.scrollToCenter()
        progressBar.startAnimation()

        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = HuanYingWindow()
    window.show()
    sys.exit(app.exec())


单独是能运行的啊,只是开始不是从0滚动....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-3 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表