WxPython:如何在主父帧中停止进一步的代码执行,直到其子帧被关闭

WxPython:如何在主父帧中停止进一步的代码执行,直到其子帧被关闭,python,wxpython,python-2.7,Python,Wxpython,Python 2.7,我正在做一个用python编写的项目,在Wxpython中使用GUI完成最后3个不眠之夜,现在我被击中了。实际上,在主父框架内,我正在另一个线程中执行一个新的子框架,我只想停止进一步的代码执行,直到它的子框架完成工作并关闭。 我尝试过使用threading.Thread.join()方法,但它似乎无法有效工作,并且在关闭子帧后,主父帧挂起。 有没有什么有效的方法来执行此操作?使用wx.Dialog而不是子帧及其showmodel()方法来停止主帧的执行。从技术上讲,您也可以使用框架的MakeMo

我正在做一个用python编写的项目,在Wxpython中使用GUI完成最后3个不眠之夜,现在我被击中了。实际上,在主父框架内,我正在另一个线程中执行一个新的子框架,我只想停止进一步的代码执行,直到它的子框架完成工作并关闭。 我尝试过使用threading.Thread.join()方法,但它似乎无法有效工作,并且在关闭子帧后,主父帧挂起。
有没有什么有效的方法来执行此操作?

使用wx.Dialog而不是子帧及其showmodel()方法来停止主帧的执行。从技术上讲,您也可以使用框架的MakeModal()方法获得类似的效果,但我认为使用对话框更有意义

顺便说一下,当将线程与wxPython(或任何GUI工具包)一起使用时,必须使用工具包的线程安全方法来更新GUI。您不应该尝试从线程直接访问GUI元素,因为这是未定义的行为。相反,请使用wx.CallAfter、wx.CallLater或wx.PostEvent,因为它们是wxPython的线程安全方法

另见:


使用wx.对话框而不是子帧及其showmodel()方法停止主帧的执行。从技术上讲,您也可以使用框架的MakeModal()方法获得类似的效果,但我认为使用对话框更有意义

顺便说一下,当将线程与wxPython(或任何GUI工具包)一起使用时,必须使用工具包的线程安全方法来更新GUI。您不应该尝试从线程直接访问GUI元素,因为这是未定义的行为。相反,请使用wx.CallAfter、wx.CallLater或wx.PostEvent,因为它们是wxPython的线程安全方法

另见:


wx不是特别告诉您从主线程启动所有帧吗。。。你干吗不干脆把线程剥离出来做工作呢?(也许还可以看看你是否真的需要线程……GIL使它们的用处比通常的线程要小一些……@JoranBeasley okey……但是,在主父帧代码的子帧完成工作并关闭之前,停止进一步执行主父帧代码怎么样。然后你只需将
wx.Dialog
子类化,而不是
wx.frame
ShowModal
而不是
Show
wx不是专门告诉您从主线程启动所有帧吗?…为什么不直接剥离线程来完成工作?(也许还可以看看你是否真的需要线程……GIL使它们的用处比通常的线程要小一些……@JoranBeasley okey……但是,在主父帧代码的子帧完成工作并关闭之前,停止进一步执行主父帧代码怎么样。然后你只需将
wx.Dialog
子类化,而不是
wx.frame
ShowModal
而不是
Show
Mike知道他的wx材料;P…而且显然比我在评论中更善于解释:)谢谢!你的想法是对的,我只是把答案形式化了一点,并认为应该有一个关于如何使用wx线程的解释,因为这可能是一个棘手的问题。Mike知道他的wx东西;P…显然比我在评论中解释得更好:)谢谢!你的想法是对的,我只是把答案形式化了一点,并认为应该有一个关于如何使用wx线程的解释,因为这可能是一个棘手的问题。