其他分享
首页 > 其他分享> > 如何使用Signal控制QProgressBar

如何使用Signal控制QProgressBar

作者:互联网

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

除了更新self.label之外,我们还想更新进度条.
但由于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,qt,pyqt,qprogressbar
来源: https://codeday.me/bug/20191009/1875733.html