2012-07-22 49 views
0

我最近創建了一段代碼,總是給我看了這樣的消息時兩次我關閉它: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 *'

回答

0

這是一個GTK警告。通過running與環境變量

export G_DEBUG=fatal-warnings 

我不知道如果bug是 - 你可以對它進行調試(例如在Ubuntu或Debian的libgtk-3-0-dbglibglib2.0-0-dbg封裝,gdb和您的GTK和油嘴庫的調試變體) Gtk本身,在WxWidget中,在Python中使用C,或者在你的Python代碼中。