从非GUI类中更改PyQt4进度条的值

2 投票
1 回答
3220 浏览
提问于 2025-04-16 19:56

我有一个用Qt设计器创建的图形界面类,其中有一个进度条,还有另一个类负责进行所有的计算。在计算过程中,我希望我的进度条能够定期更新。我想的办法是在另一个类里做类似这样的事情:

gui.progressbar.setValue(some%)

但是我似乎无法让它正常工作。图形界面类的代码大概是这样的:

from PyQt4 import QtCore, QtGui
from Run import RunProgram

class Ui_mainLayout(QtGui.QWidget):
    def setupUi(self, mainLayout):
        mainLayout.setObjectName(_fromUtf8("mainLayout"))
        def setLayout():
            self.basic_tab = QtGui.QWidget()
            self.progressBar = QtGui.QProgressBar(self.basic_tab)
        setLayout()
        RunProgram()

然后我希望能够做类似这样的事情:

import gui

class RunProgram:
    def __init__(self):
        something = someMaths
        gui.Ui_mainLayout.progressBar.setValue(something)

但显然我很笨,这个方法不行,有人能给我指个方向吗?谢谢!

1 个回答

1

gui.Ui_mainLayout 不是一个已经创建的类,而是一个“类型”对象(也就是可以被实例化的对象 - 你可以在这里找到一个很好的概述)。gui.Ui_mainLayout.progressBar 这个东西不会存在,因为它是在运行 setupUi 时才会被创建的。

试着把 progressBar 明确地传递给 RunProgram

from PyQt4 import QtCore, QtGui
from Run import RunProgram

class Ui_mainLayout(QtGui.QWidget):
    def setupUi(self, mainLayout):
        mainLayout.setObjectName(_fromUtf8("mainLayout"))
        def setLayout():
            self.basic_tab = QtGui.QWidget()
            self.progressBar = QtGui.QProgressBar(self.basic_tab)
        setLayout(self.progressBar)
        RunProgram()

还有

class RunProgram:
    def __init__(self, progressBar):
        something = someMaths
        progressBar.setValue(something)

觉得这样做会有效,但我建议你以后发帖时提供一个你期望能运行的最小示例,这样可以更好地帮助解释问题。

撰写回答