下面的程序应该只是累加和 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_())
有什么帮助吗?
您没有让 Qt 的事件循环运行,因此 GUI 没有响应。还,repaint()
不需要,则QLabel.setText()
将重新绘制标签。它所做的只是排队一个额外的绘制事件,但这永远不会被处理。
你需要做的是更换self.repaint()
with QtGui.QApplication.processEvents()
。当您处于循环中时,这将使应用程序有机会处理任何待处理事件(包括重绘以及 UI 交互)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)