2011-02-04 83 views
3

我正在测试使用PyQt构建的gui,我希望能够使用PyQt事件循环启动后执行的python代码与app进行交互(app.exec_())。另一种说法是,我希望app.exec_的调用立即返回,就像gui是无模式的,后面跟着与gui交互的python代码。在PyQt事件循环中执行Python代码

我发现this在一个线程中运行PyQt循环的例子,但不想做非常规的事情。有没有办法让PyQt消息循环继续处理消息,同时在exec_被调用后在主线程中执行python代码?

+2

你能解释一下在第二个线程中运行PyQt循环或你自己的附加代码是什么问题吗?你将如何能够同时执行两个代码路径*没有*两个线程? – 2011-02-04 01:47:26

+0

我可以在第二个线程中安排测试,但是一些测试涉及逻辑并且不止是单个函数或对象。有没有办法将一段python代码传递给QThread并让QThread执行该代码作为运行的一部分? – Cerberellum 2011-02-04 04:15:03

回答

0

我明白了。我可以使用exec从主线程逐行执行测试脚本,然后从工作线程运行gui。

0

这里的一个选择是调用`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()。您可以将时间设置为零,以使该功能立即排队等待执行。

0

的最简单的方法是使用IPython的:

ipython --gui=qt4 

参见ipython --helponline documentation用于更多选项(例如GTK,TK等)。