从线程停止WxPython应用程序的主循环需要窗口焦点

时间:2013-03-19 12:17:29

标签: python multithreading wxpython wxwidgets

我有一个命令行实用程序,用于启动和停止WxPython应用程序实例。我正在一个线程中启动应用程序,以便我可以继续运行命令以及使用gui应用程序。

我的问题是,当我停止应用程序时,控制台会挂起,直到我关注应用程序窗口,然后关闭。我不确定为什么该应用需要专注退出。

app线程如下所示:

class RunAppThread(threading.Thread):
    def run(self):
        self.app = wx.App(redirect=False)
        self.frame = AppWindow(None)
        self.app.MainLoop()

    def stop(self):
        self.app.ExitMainLoop()

相关的CLI操作是:

def startapp(self):
    self.app = gui.RunAppThread()
    self.app.start()

def stopapp(self):
    self.app.stop()
    self.app.join()

是否有更好/正确的方法退出主循环而不是调用wx.App.ExitMainLoop()

1 个答案:

答案 0 :(得分:3)

调用wx.App.ExitMainLoop后,使用wx.WakeUpMainThread获取主线程来处理事件。