我的代码
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
我哪里错了?提前谢谢!
答案 0 :(得分:1)
问题不在你展示的代码中,而是在调用它的代码中,或者在选择调用它的时候。如果不知道从哪里调用它就很难确定,但是你必须从捕获鼠标时调用的某个事件处理程序中做到这一点。显示消息对话框会中断鼠标捕获并导致您看到警告。
有两种解决方案:修改捕获鼠标的组件以响应捕获失败或此时不显示wx.MessageDialog
。如果它在C ++而不是Python级别(尽管你总是可以尝试更新到wxPython 2.9.4并查看问题是否在同一时间没有修复),前者很难为你做的事情,但后者很容易仅使用wx.CallAfter完成。