我最近创建了一段代码,当我关闭它时,它总是向我显示类似这样的消息两次:
(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 上尝试时,什么也没有出现。
我使用的解决方法是在我的框架中绑定(bind)一个关闭事件处理程序
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: in method 'Menu_SetParent', expected argument 2 of type 'wxMenu *'
最佳答案
这是一个 GTK 警告。您可以通过 running 来调试它(使用 gdb
以及 Gtk 和 Glib 库的调试变体 - 例如 Ubuntu 或 Debian 上的 libgtk-3-0-dbg
和 libglib2.0-0-dbg
软件包)。与环境变量
export G_DEBUG=fatal-warnings
我不知道这个 bug 是在 Gtk 本身、WxWidget、Python 的 C 胶水中还是在你的 Python 代码中。
关于windows - LIBDBUS 菜单-GLIB-警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598159/