【问题标题】:Instantiating a new WX Python GUI from spawn thread从 spawn 线程实例化一个新的 WX Python GUI
【发布时间】:2012-05-21 03:15:49
【问题描述】:

我有一个运行 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 处于活动状态。有什么建议么?另外,请不要建议将多线程架构更改为一个线程;谢谢。

【问题讨论】:

    标签: multithreading wxpython python-2.7


    【解决方案1】:

    一个程序中不能有两个 wxPython 主循环。您确实只需要使用第一个 wxPython 程序的主线程。如果要生成另一个应用程序,请使用子进程。像这样的东西应该可以工作:

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

    【讨论】:

    • 谢谢您,感谢您回答为什么我无法让它工作以及解决方法是什么。我现在正在阅读有关子进程的信息,但是,我很难让 GUI2 子进程将数据返回到第一个进程(线程 #2)。我目前有以下代码。 --- 抱歉,再给我几分钟,试着弄清楚如何输入一个新行以发布一个干净的帖子
    • 由于我后续问题的复杂性,我将其作为一个新问题发布。如果你不介意,你能看看我的新帖子 Mike。谢谢! stackoverflow.com/questions/10689186/…
    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2020-07-13
    相关资源
    最近更新 更多