在PyQt事件循环中执行Python代码
问题描述:
我正在测试使用PyQt构建的gui,我希望能够使用PyQt事件循环启动后执行的python代码与app进行交互(app.exec_())。另一种说法是,我希望app.exec_的调用立即返回,就像gui是无模式的,后面跟着与gui交互的python代码。在PyQt事件循环中执行Python代码
我发现this在一个线程中运行PyQt循环的例子,但不想做非常规的事情。有没有办法让PyQt消息循环继续处理消息,同时在exec_被调用后在主线程中执行python代码?
答
我明白了。我可以使用exec从主线程逐行执行测试脚本,然后从工作线程运行gui。
答
这里的一个选择是调用`exec_()'后调用QtCore.QTimer.singleShot()
来启动你的python代码。
例如:
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
# Setup the GUI.
gui = MyGui()
gui.showMainWindow()
# Post a call to your python code.
QtCore.QTimer.singleShot(1000, somePythonFunction)
sys.exit(app.exec_())
这将1秒后执行该功能somePythonFunction()
。您可以将时间设置为零,以使该功能立即排队等待执行。
你能解释一下在第二个线程中运行PyQt循环或你自己的附加代码是什么问题吗?你将如何能够同时执行两个代码路径*没有*两个线程? – 2011-02-04 01:47:26
我可以在第二个线程中安排测试,但是一些测试涉及逻辑并且不止是单个函数或对象。有没有办法将一段python代码传递给QThread并让QThread执行该代码作为运行的一部分? – Cerberellum 2011-02-04 04:15:03