2011-02-04 21 views
3

内からPythonコードを実行し、私はPyQtはイベントループが開始した後に実行されるPythonコードを使用して、GUIと相互作用する能力をしたいと思います(app.exec_())。これを言うもう一つの方法は、GUIがモードレスであるかのようにapp.exec_への呼び出しをすぐに戻し、guiとやりとりする別のPythonコードが続くようにすることです。私はPyQtはを使用して構築されたGUIをテストしていPyQtはイベントループ

私はスレッドでのPyQtループを実行しているのthis例を見つけましたが、とても独創的な何かをする必要はありません。 exec_が呼び出された後、メインスレッドでPythonコードを実行している間にメッセージを処理し続けるPyQtメッセージループを取得する方法はありますか?

+2

PyQtループまたは別のコードを別のスレッドで実行したときの問題点を説明できますか? 2つのスレッドを使わずに2つのコードパスを同時に*実行するにはどうすればいいですか? –

+0

2番目のスレッドでテストをスケジュールすることができますが、テストの中にはロジックが含まれており、複数の機能やオブジェクトがあります。 PythonコードのブロックをQThreadに渡し、QThreadでそのコードを実行の一部として実行させる方法はありますか? – Cerberellum

+0

QThread内からexecfileを使用することはできないようです。 – Cerberellum

答えて

0

私はそれを得ました。 execを使ってメインスレッドから行ごとにテストスクリプトを実行し、ワーカースレッドからGUIを実行することができます。

0

あなたが何をしたいのか正確にはわかりません。 PyQtのためにPy(known as PyCrust)のようなものをお探しですか?ここ

0

1つのオプションは、「)( `exec_を呼び出した後、あなたのPythonコードを開始するQtCore.QTimer.singleShot()コールを使用することです。例えば

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 --help以上のオプションのためonline documentation(例えばGTK、TK、等)を参照します。

+0

これは、インタープリタがアイドル状態のときに実行されるPythonのinputhook機能に依存していることに注意してください。たとえば、インタプリタに長時間実行するループを入力すると、Qtイベントループは実行されません。 – Gus

関連する問題