Stj*_*pan 2 python user-interface pyqt pyqt4 python-2.7
我有以下问题:
在PyQt中按下按钮后,我必须做两个动作:
我得到的是在等待一段时间后,1和2同时完成.
部分代码是:
#in the signals definition...
signalUpdateProgressDialog = QtCore.pyqtSignal(str) # signal definition
#in the connections definition...
self.btnStopOpt.clicked.connect(self.clickStop1)
self.btnStopOpt.clicked.connect(self.clickStop)
def updateProgressDialog(self, dialog):
self.ProgressDialog.setHtml(dialog)
def clickStop1(self):
# notify
self.signalUpdateProgressDialog.emit('Message')
def clickStop(self):
# shut down thread...
print "Thread Stopped"
time.sleep(5)
# enable run button
self.btnRun.setEnabled(True)
Run Code Online (Sandbox Code Playgroud)
我尝试了所有的clickStop方法,我尝试使用和不发出updateProgress信号.始终,GUI仅在等待期后刷新.
不过,我以前遇到过这个问题,我想我不明白它是如何与GUI一起工作的.一般来说,如何获得所需的行为:在执行代码行时更新GUI?
在将控制返回到Qt事件循环之前,不会更新/绘制GUI.事件循环在主线程中运行,并且处理与GUI的交互并协调信号/槽系统.
当您在插槽中调用Qt函数时clickStop1(),Qt调用会运行,但GUI不会立即重绘.在这种情况下,控制不会返回到事件循环,直到clickStop()完成运行(也clicked就是处理信号的所有插槽).
您的代码的主要问题是您time.sleep(5)在主线程中有一个阻塞用户的GUI交互以及重绘.您应该缩短插槽的执行时间以维持响应式GUI.
因此我建议你修改,clicked()以便在指定的超时后触发单击QTimer.QTimers不阻止主线程,因此将保持响应性.但是,请注意用户可能同时与GUI交互!在等待QTimer执行时,确保他们不能通过某些用户交互来破坏程序的状态.
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |