如何在长时间运行的任务中更改QPushButton的文本,并在完成任务时更改回来?

时间:2012-05-26 05:54:09

标签: python pyqt pyqt4

我有一些类似的代码:

class MyApp(Ui_MainWindow):
    def __init__(self):
        pass

    def setupUi(self, *args):
        super(MyApp, self).setupUi(*args)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.doCheck)

    def doCheck(self):
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Checking...", None, QtGui.QApplication.UnicodeUTF8))
        # Code to do real checking here... (it's a network app)
        # When check done, display result in a "QTextBrowser" 
        # ....
        # Change text of Button to "Done!"
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Done!", None, QtGui.QApplication.UnicodeUTF8))

但结果并不如我所料。 我的应用程序进行网络检查并显示结果正常,但检查开始时按钮没有将文本更改为“正在检查...”;它只是将文字改为“完成!”一切都结束了!

1 个答案:

答案 0 :(得分:2)

更改按钮标签后,您应该运行QApplication::processEvents()以使用新标签更新UI。

请注意,在长任务运行时,您的UI将被冻结。为避免这种情况,有时您应该在长时间操作期间调用QApplication::processEvents(),或者在单独的QThread中运行此操作。