0

我的代码

 def myCaller(self, event):


    wx.CallAfter(self.msgbox(0.3434, 0.34, 0.121))



 def msgbox(self, val, f1, f2):

    message = "Node Failure Probability: %f \nLeft Child Value: %f \nRight Child Value: %f" % (val, f1, f2)

    dlg = wx.MessageDialog(self, message, "Node Information", wx.OK)
    dlg.showmodal()
    dlg.Destroy()

输出正常,但随后在 Shell 中出现错误:

     dlg.ShowModal()
     File "C:\Python27\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py", line 711, in ShowModal
return _windows_.Dialog_ShowModal(*args, **kwargs)
    wx._core.PyAssertionError: C++ assertion "wxAssertFailure" failed at ..\..\src\common\wincmn.cpp(2571) in DoNotifyWindowAboutCaptureLost(): window that captured the mouse didn't process wxEVT_MOUSE_CAPTURE_LOST

我哪里错了?提前致谢!

4

1 回答 1

1

问题不在于您显示的代码,而在于调用它的代码,或者更确切地说,在于选择调用它的那一刻。在不知道从哪里调用它的情况下很难确定,但是您必须通过捕获鼠标时调用的某个事件处理程序来执行此操作。显示消息对话框会中断鼠标捕获并导致您看到警告。

有两种解决方案:要么修改正在捕获鼠标的组件以对捕获失败做出反应,要么wx.MessageDialog此时不显示。如果它是 C++ 而不是 Python 级别的东西,前者对你来说很难做到(尽管你总是可以尝试更新到 wxPython 2.9.4 并查看问题是否在此期间没有解决),但后者可以很容易只需使用wx.CallAfter 即可完成。

于 2013-03-17T00:27:11.273 回答