wxPython消息对话框错误“捕获鼠标的窗口未处理wxEVT_MOUSE_CAPTURE_LOST”

时间:2013-03-16 18:26:09

标签: python wxpython wxwidgets

我的代码

 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

我哪里错了?提前谢谢!

1 个答案:

答案 0 :(得分:1)

问题不在你展示的代码中,而是在调用它的代码中,或者在选择调用它的时候。如果不知道从哪里调用它就很难确定,但是你必须从捕获鼠标时调用的某个事件处理程序中做到这一点。显示消息对话框会中断鼠标捕获并导致您看到警告。

有两种解决方案:修改捕获鼠标的组件以响应捕获失败或此时不显示wx.MessageDialog。如果它在C ++而不是Python级别(尽管你总是可以尝试更新到wxPython 2.9.4并查看问题是否在同一时间没有修复),前者很难为你做的事情,但后者很容易仅使用wx.CallAfter完成。