从spawn线程实例化一个新的WX Python GUI

时间:2012-05-21 03:15:50

标签: multithreading wxpython python-2.7

我有运行WX Python GUI的主线程。主GUI为用户提供了一个图形界面来选择脚本(映射到python函数)和一个“开始”按钮,它产生第二个线程(线程#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,但是我再次回到不知道如何保持GUI2活动状态。有什么建议?另外,请不要将多线程架构更改为一个线程;谢谢。

1 个答案:

答案 0 :(得分:0)

一个程序中不能有两个wxPython主循环。你真的必须只使用第一个wxPython程序的主线程。如果要生成另一个应用程序,则使用子进程。这样的事情应该有效:

import subprocess
subprocess.Popen("python path/to/myscript.py")