Python 2.7、WxPython 3.0.2
我们正在尝试在某些情况下自动关闭整个程序。出于各种原因,我们不能就这样结束这个过程。我们已经取得了一定程度的成功。如果没有模式对话框,或者只有一个模式对话框,我们可以关闭它。一旦我们引入第二个模态对话框(嵌套的),它就无法正常停止。在
收到的实际错误似乎是:
wx._core.PyAssertionError: C++ assertion "IsRunning()" failed at ..\..\src\common\evtloopcmn.cpp(83) in wxEventLoopBase::Exit(): Use ScheduleExit() on not running loop
这是我们问题的一个有效例子。帧将在5秒后自动关闭。单击按钮将加载一个对话框。单击对话框上的按钮将打开另一个对话框。在打开最后一个对话框之前,它可以正常工作。在
^{pr2}$
可靠地优雅地关闭所有模式对话框的唯一方法是使用wxModalDialogHook记住所有打开的对话框,然后在退出应用程序之前按相反的顺序(即后进先出)关闭所有模式对话框。在
不幸的是,我不知道
wxModalDialogHook
在Python中是否可用。在我认为这里发生的是,对
ShowModal()
的第一次调用在应用程序级别(不仅仅是帧级别)阻止了,这将阻止第二个对话框完全初始化。为了解决这个问题,我将调用Show()
而不是ShowModal()
,并将wx.FRAME_FLOAT_ON_PARENT
添加到对话框样式标志中。您还可以调用Disable()
对话框打开时不希望用户与之交互的部分。在编辑:下面是一个工作示例:
相关问题 更多 >
编程相关推荐