我正在尝试学习PyQt4并为此目的制作了以下Gui - 它没有其他用途。
代码几乎按预期工作 - 唯一没有的是'else'子句。
import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Form(QDialog):
def __init__ (self, parent=None):
super(Form, self).__init__(parent)
self.startButton = QPushButton('Start')
self.stopButton = QPushButton('Stop')
self.browser = QTextBrowser()
self.myLabel = QLabel()
layout = QVBoxLayout()
layout.addWidget(self.startButton)
layout.addWidget(self.stopButton)
layout.addWidget(self.browser)
layout.addWidget(self.myLabel)
self.setLayout(layout)
self.startButton.setFocus()
self.startButton.clicked.connect(self.guiLoop)
self.stopButton.clicked.connect(self.guiLoop)
self.setWindowTitle('Loop Gui')
def guiLoop(self):
state = False
text = self.sender()
self.myLabel.setText(text.text())
time.sleep(1)
if text.text() == 'Start':
state = True
else:
state = False
i = 0
while state:
time.sleep(.1)
self.browser.append(str(i))
QApplication.processEvents()
i += 1
else:
self.browser.append('Stop loop')
time.sleep(3)
sys.exit()
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
...我希望程序在退出之前在浏览器小部件中打印“停止循环”,但它不会
else:
self.browser.append('Stop loop')
time.sleep(3)
sys.exit()
我现在有3个问题:
提前谢谢
答案 0 :(得分:1)
在您的其他部分
中添加以下行QApplication.processEvents()
像
while state:
time.sleep(.1)
if i % 10 == 1:
self.browser.append(str(i))
QApplication.processEvents()
i += 1
else:
self.browser.append('Stop loop')
QApplication.processEvents()
time.sleep(3)
sys.exit()
输出如:1 11 21 31等..和停止循环