2011-02-04 82 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等)。