【问题标题】:PyQt Progressbar QThread does not work correctPyQt Progressbar QThread 无法正常工作
【发布时间】:2014-03-10 04:04:19
【问题描述】:

我的代码有问题。我的计划是使用进度条显示 for 循环的进度。我的想法是使用 Qthread。我下面的代码以某种方式工作,但不是 100% 正确。进度条显示 for 循环的进度,但不是通过线程,即如果我尝试单击更多,然后单击停止 GUI 冻结。 我不是 QtCore 专家。请有人帮助我并告诉我为什么它不能按我希望的方式工作吗?

非常感谢!

from PyQt4 import QtGui, QtCore

#Progressbar
class MyCustomWidget(QtGui.QWidget):

    def __init__(self, parent=None):
        super(MyCustomWidget, self).__init__(parent)
        layout = QtGui.QVBoxLayout(self)       

        self.progressBar = QtGui.QProgressBar(self)
        self.progressBar.setRange(0,100)
        layout.addWidget(self.progressBar)

    #Update Progressbar
    def onProgress(self, i):
        self.progressBar.setValue(i)
        if self.progressBar.value() >= self.progressBar.maximum():
            self.close()

#Threading Class
class ASA(QtCore.QThread):
    notifyProgress = QtCore.pyqtSignal(int)
    def run(self, i):

        #Sends the new information to the Update Function
        self.notifyProgress.emit(i)
        time.sleep(0.01)

#-----------------------------------------#
#Main Function
app = QtGui.QApplication(sys.argv)
bar = MyCustomWidget()
bar.show()

bar.asa = ASA()
bar.asa.notifyProgress.connect(bar.onProgress)
bar.asa.start()

#For loop for the progressbar
for i in range(105):
    ASA.run(bar.asa, i)
    time.sleep(0.5)  

sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt progress-bar qthread qtcore


    【解决方案1】:

    循环需要在线程本身内部运行:

    def run(self):
        #Sends the new information to the Update Function
        for i in range(105):
            self.notifyProgress.emit(i)
            time.sleep(0.01)
    

    【讨论】:

    • 谢谢!但是有没有办法在 ASA 课程之外做到这一点?因为我的循环包含 200 行代码。
    • 我认为按照你给我看的方式使用它是可以的。但有一个问题:例如,我该怎么做?设置for循环的范围?我希望在调用进度条时可以交出一个范围,而不是 105。
    • @user3318234 重新指定范围:这是一个单独的问题,但您可以在您的 ASA.__init__ 中指定它吗?
    • 非常感谢。我有想过,但直到现在我才尝试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2021-04-08
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多