最近、閉じたときに常に次のようなメッセージを 2 回表示するコードを作成しました。
(python:11712): LIBDBUSMENU-GLIB-WARNING **: 自分が親だと信じていない子を削除しようとしています。
私が望むのは、その警告から取り除くことです。このコードはそのような動作を再現します (メッセージは閉じたときに 1 回表示されます)。
import wx
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, title="Sample")
menuBar = wx.MenuBar()
filemenu = wx.Menu()
filemenu.Append(wx.ID_ANY,"&Pass")
menuBar.Append(filemenu,"&File")
self.SetMenuBar(menuBar)
app = wx.PySimpleApp()
frame = MyFrame(None)
frame.Show()
app.MainLoop()
完全に機能しますが、アプリを閉じると警告メッセージが表示されます。これは Linux のみのメッセージです。Windows で試しても何も表示されません。
私が使用した回避策は、フレームに閉じるイベントハンドラーをバインドすることでした
def __init__(self, parent):
... # Previous code here
self.Bind(wx.EVT_CLOSE, self.OnClose)
そして、そのようなイベントハンドラーを次のようにします
def OnClose(self, evt):
for menu in self.GetMenuBar().GetMenus(): # (wx.Menu, caption) tuples
menu[0].Destroy() # Bad parents won't remove you, you'll DIE before!!!
evt.Skip()
Linux の単純なアプリでは問題なく動作しましたが、Windows で試したときにクラッシュしました。だから私はLinux上でランタイムで何が起こっていたのかを見たいと思っていました.
menu[0].Destroy()
に
print menu[0].Parent
そして、答えとして「なし」が表示されました。しかし、私はそれを作ることができませんでした:
menu[0].Parent = self
どちらも:
menu[0].Parent = self.GetMenuBar()
どちらも TypeError を発生させるため:
TypeError: メソッド 'Menu_SetParent' で、タイプ 'wxMenu *' の引数 2 が必要です