我最近創建了一段代碼,總是給我看了這樣的消息時兩次我關閉它:LIBDBUSMENU-GLIB預警
(python:11712): LIBDBUSMENU-GLIB-WARNING **: Trying to remove a child that doesn't believe we're it's parent.
我想是要收到警告擺脫。 這段代碼複製這種行爲(關閉時出現一次的消息):
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: in method 'Menu_SetParent', expected argument 2 of type 'wxMenu *'