我有运行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活动状态。有什么建议?另外,请不要将多线程架构更改为一个线程;谢谢。
答案 0 :(得分:0)
一个程序中不能有两个wxPython主循环。你真的必须只使用第一个wxPython程序的主线程。如果要生成另一个应用程序,则使用子进程。这样的事情应该有效:
import subprocess
subprocess.Popen("python path/to/myscript.py")