0

WX Python GUI を実行するメイン スレッドがあります。メイン GUI は、スクリプト (Python 関数にマップされている) を選択するためのグラフィカル インターフェイスと、選択したスクリプトを実行するための 2 番目のスレッド (スレッド #2) を生成する [開始] ボタンをユーザーに提供します。私が抱えている問題は、新しい WX GUI (GUI2) をポップアップして、ユーザーがデータを入力できるようにすることができないことです。

# Function that gets invoked by Thread #2
def scriptFunction():
  # Code to instantiate GUI2; GUI2 contains wx.TextCtrl fields and a 'Done' button;
  # When 'Done' button is clicked, data entered in fields are process and second GUI is destroyed
  gui2Frame = Gui2Frame(None, "Enter Data Gui")  
  gui2Frame.Show(True)

  # This is where I need help. Cannot figure out how to pend for user input;
  # In this example; my 'Done' button sets the Event flag
  verifyEvent = threading.Event()
  verifyEvent.wait(10)

  # Process entered data time
  processData()

現在、この方法では GUI2 が 10 秒間ロックされます。生成されたスレッドがロックされているため、これは理にかなっています。time.sleep() を使用して while ループを実装すると、同じことが行われます。GUI2を処理するためだけに3番目のスレッドを生成することを検討しましたが、GUI2をアクティブに保つ方法がわからないことに戻りました。助言がありますか?また、マルチスレッド アーキテクチャを 1 つのスレッドに変更することについては、推奨しないでください。ありがとうございました。

4

1 に答える 1

0

1 つのプログラムに 2 つの wxPython メインループを含めることはできません。実際には、最初の wxPython プログラムのメイン スレッドだけを使用する必要があります。別のアプリケーションを生成する場合は、サブプロセスを使用します。このようなものが動作するはずです:

import subprocess
subprocess.Popen("python path/to/myscript.py")
于 2012-05-21T13:40:50.680 に答える