python - 如何用Signal控制QProgressBar

标签 python qt pyqt qprogressbar

按下按钮开始 100 轮循环。使用QLabel.setText(),我们从clicked()函数的范围内更新self.label

除了更新self.label之外,我们还想更新progressbar。 但由于 progressbar 是一个局部变量,我们无法从 onClick() 函数内部更新它。

enter image description here

import time

class ProgressBar(QtGui.QProgressBar):
    def __init__(self, parent=None, total=20):
        super(ProgressBar, self).__init__(parent=parent)

        self.setMinimum(1)
        self.setMaximum(105)        
        self.setTextVisible(True) 

    def set_to_value(self, value):
        self.setValue(value)
        QtGui.qApp.processEvents()

    def closeEvent(self, event):
        self._active=False


class Dialog(QtGui.QDialog):
    def __init__(self):
        super(QtGui.QDialog,self).__init__()

        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)
        self.label = QtGui.QLabel('idle...')
        layout.addWidget(self.label)

        progressbar = ProgressBar(self)
        layout.addWidget(progressbar) 

        button = QtGui.QPushButton('Process')
        button.clicked.connect(self.onClick)
        layout.addWidget(button) 

    def onClick(self):
        for i in range(101):
            message = '...processing %s of 100'%i
            self.label.setText(message)
            QtGui.qApp.processEvents()
            time.sleep(1)


if __name__ == '__main__':
    app = QtGui.QApplication([])
    dialog = Dialog()
    dialog.resize(300, 100)
    dialog.show()
    app.exec_()

最佳答案

将进度条声明为:

self.progressbar = ProgressBar(self)

关于python - 如何用Signal控制QProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37063664/

相关文章:

python - 弹性转码器 Boto3 Lambda

Python,缩放浮点范围 [0,1) 到 [min, max)

python - for 循环中的嵌套字典向所有嵌套键添加相同的值

windows - Qt/C++ : Icons not showing up when program is run under windows O. 小号

python - PyQt [QTreeWidget] : How to add Radiobutton for items?

python - Spark DAG 与 'withColumn' 和 'select' 不同

c++ - 愚蠢的 C++ 语法尚未声明

python - 确定 PyQt 是否在 Maya 中运行

c++ - 带有qt声子的视频播放器(使用python)

c++ - Qt4 QNetworkManager 挂起