从线程停止WxPython应用程序主循环需要窗口焦点
我有一个命令行工具,可以启动和停止一个WxPython应用程序。我是把这个应用放在一个线程里运行,这样我就可以继续输入命令,同时也能使用这个图形界面的应用。
我遇到的问题是,当我停止这个应用时,控制台会卡住,直到我把注意力集中到应用窗口上,然后它才会关闭。我不太明白为什么这个应用需要获得焦点才能退出。
这个应用的线程看起来是这样的:
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()
相关的命令行操作是:
def startapp(self):
self.app = gui.RunAppThread()
self.app.start()
def stopapp(self):
self.app.stop()
self.app.join()
有没有更好或者正确的方法来退出主循环,而不是调用 wx.App.ExitMainLoop()
呢?
1 个回答
3
在调用 wx.App.ExitMainLoop
之后,可以使用 wx.WakeUpMainThread
来让主线程处理事件。