python – PyQt 4 UI冻结

以下程序应该只计数和int并在标签中显示其值.
但过了一会儿,GUI停止工作,而循环继续.

from PyQt4 import QtGui,QtCore
import sys

class main_window(QtGui.QWidget):
    def __init__(self,parent=None):
        #Layout       
        QtGui.QWidget.__init__(self,parent)
        self.bt=QtGui.QPushButton('crash')
        self.lbl=QtGui.QLabel('count')
        ver=QtGui.QHBoxLayout(self)
        ver.addWidget(self.bt)
        ver.addWidget(self.lbl)
        self.cnt=0
        self.running=False
        self.connect(self.bt,QtCore.SIGNAL("clicked()"),self.count)

    def count(self):
        self.running=True
        while self.running:
            self.cnt+=1
            print self.cnt
            self.lbl.setText(str(self.cnt))
            self.repaint()

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    mw=main_window()
    mw.show()
    sys.exit(app.exec_())   

有帮助吗?

最佳答案
def count(self):
    self.running=True
    while self.running:
        self.cnt+=1
        print self.cnt
        self.lbl.setText(str(self.cnt))
        self.repaint()

你有没有考虑过这个无限循环的退出?例如. self.running =假.
GUI可能会停止工作,因为它没有足够的时间来执行重绘.您可能希望在循环中添加一些time.sleep以等待GUI重新绘制.

更新:您应该使用QTimer而不是简单的while循环来实现您正在实施的行为.

转载注明原文:python – PyQt 4 UI冻结 - 代码日志