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()

出力は問題なく出力されますが、シェルでエラーが発生します。

     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

問題は、あなたが示しているコードではなく、それを呼び出すコード、またはそれを呼び出すことを選択した瞬間にあります。どこから呼び出すのかを知らずに確認するのは困難ですが、マウスがキャプチャされている間に呼び出された何らかのイベント ハンドラーから実行しているに違いありません。メッセージ ダイアログを表示すると、マウス キャプチャが中断され、表示されている警告が表示されます。

2 つの解決策があります。マウスをキャプチャしているコンポーネントを変更して、キャプチャの失敗に対応するかwx.MessageDialog、現時点では表示しないようにします。前者は、Python レベルではなく C++ レベルの場合は実行が難しいリスクがあります (ただし、いつでも wxPython 2.9.4 に更新して、その間に問題が修正されていないかどうかを確認できます) が、後者は簡単に実行できます。wx.CallAfterを使用するだけで実行できます。

于 2013-03-17T00:27:11.273 に答える