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

1 投票
1 回答
4158 浏览
提问于 2025-04-17 19:37

我有一个命令行工具,可以启动和停止一个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 来让主线程处理事件。

撰写回答