以下代码在按下START
按钮后每秒更新按钮的文本。预期的功能是让代码“等待”,直到计时器停止,然后继续执行代码。也就是说,在按下START
后,第二个按钮的文本会增加到3
,然后才会在控制台上显示文本I waited!
。
import sys
from PySide import QtGui, QtCore
class Example(QtGui.QWidget):
def __init__(self, parent=None):
super(Example, self).__init__(parent)
self.app_layout = QtGui.QVBoxLayout()
self.setLayout(self.app_layout)
self.setGeometry(300, 300, 50, 50)
self.current_count = 0
self.count_to = 4
self.delay = 1000
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.updateButtonCount)
# start button
start_button = QtGui.QPushButton()
start_button.setText('START')
start_button.clicked.connect(self.startCount)
self.app_layout.addWidget(start_button)
# number button
self.number_button = QtGui.QPushButton()
self.number_button.setText('0')
self.app_layout.addWidget(self.number_button)
def updateButtonCount(self):
self.number_button.setText("%s" % self.current_count)
self.current_count += 1
if self.current_count == self.count_to:
self.timer.stop()
def startCount(self):
self.current_count = 0
self.timer.start(self.delay)
# this loop hangs the GUI:
while True:
if not self.timer.isActive():
break
print 'I waited!'
def main():
app = QtGui.QApplication(sys.argv)
example = Example()
example.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
上面的代码挂起了GUI,如果我删除while True:
循环,I waited!
会立即出现在控制台上。
我确定while True:
循环不是正确的方法,所以我正在寻找建议。
答案 0 :(得分:0)
我找到的解决方案是取代
while True:
if not self.timer.isActive():
break
与
while self.timer.isActive():
QtGui.QApplication.processEvents()
我不确定这是最好的解决方案。