我有一个应用程序,其中我尝试使用while循环,但应用程序就挂起了,现在我认为我需要使用QEventLoop来使应用程序工作这里是一些相关的代码
def ex_initialator(self):
""" sets up things for the problem runner """
print "ayadara"
print "self.start_button_status this is...::" ,self.start_button_status
#:Pop up dialogs
no_options_selected = QtGui.QMessageBox()
select_range = QtGui.QMessageBox()
select_op_type = QtGui.QMessageBox()
#:Shows message if no options selected
if len(self.op_types) < 1 and len(self.num_range) < 1 and self.start_button_status == 0:
print "Please pick from the options provided"
no_options_selected.exec_()
#:Shows message if range is not selected
if len(self.op_types) >= 1 and len(self.num_range) < 1 and self.start_button_status == 0 :
print "Please pick at least one of the ranges"
select_range.exec_()
#:Shows message if op_type/s not selected
if len(self.op_types) < 1 and len(self.num_range) >= 1 and self.start_button_status == 0:
print "Please pick at least one of the operation types"
select_op_type.exec_()
#:Correct inputs initiates problem maker
if len(self.op_types) >= 1 and len(self.num_range) >= 1 and (self.start_button_status == 0 or self.start_button_status == 1):
self.start_button_status = 1
self.prob_signal.runner_sig.connect(self.problem_runner)
self.prob_signal.runner_sig.emit()
def problem_runner(self):
""" Expression Makers """
while self.start_button_status == 1:
#:picks range types
range_type = random.choice(self.num_range)
D = decimal.Decimal
self.answer_lineEdit.returnPressed.connect(self.ex_evaluator)
self.answer_lineEdit.clear()我想要的是能够启动,暂停和停止按钮,我是一个初学者,所以我可能会在使用QLineEdit时出错,在这种情况下,我希望能有一些建议,以便更好地实现

发布于 2013-06-16 17:51:35
如果您正在执行长时间的操作,则需要将其移到单独的线程中,或者定期调用QApplication::processEvents()。它允许GUI继续负责。下面是一个简单的例子:
from PySide import QtGui, QtCore
import time
class MyWidget(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
layout = QtGui.QVBoxLayout(self)
self.label = QtGui.QLabel()
self.button_start = QtGui.QPushButton("Start")
self.button_stop = QtGui.QPushButton("Stop")
self.button_stop.setEnabled(False)
self.button_pause = QtGui.QPushButton("Pause")
self.button_pause.setEnabled(False)
layout.addWidget(self.label)
layout.addWidget(self.button_start)
layout.addWidget(self.button_stop)
layout.addWidget(self.button_pause)
self.button_start.clicked.connect(self.processing)
self.button_pause.clicked.connect(self.pause)
self.button_stop.clicked.connect(self.stop)
def processing(self):
self.button_start.setEnabled(False)
self.button_stop.setEnabled(True)
self.button_pause.setEnabled(True)
self.stop_requested = False
self.paused = False
i = 0
while not self.stop_requested:
QtGui.QApplication.processEvents()
if self.paused:
time.sleep(0.1)
else:
i += 1
self.label.setText(unicode(i))
self.button_start.setEnabled(True)
self.button_stop.setEnabled(False)
self.button_pause.setEnabled(False)
def pause(self):
self.paused = not self.paused
def stop(self):
self.stop_requested = True
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_()) https://stackoverflow.com/questions/17129362
复制相似问题