windows - LIBDBUS 菜单-GLIB-警告

标签 windows linux user-interface menu wxpython

我最近创建了一段代码,当我关闭它时,它总是向我显示类似这样的消息两次:

(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-dbglibglib2.0-0-dbg 软件包)。与环境变量

 export G_DEBUG=fatal-warnings

我不知道这个 bug 是在 Gtk 本身、WxWidget、Python 的 C 胶水中还是在你的 Python 代码中。

关于windows - LIBDBUS 菜单-GLIB-警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598159/

相关文章:

windows - Delphi在exe/dll中添加和使用多个资源文件*.RES

c++ - 如何检测 Qt 中的全局键序列按下?

python - 如何在 Windows 中同时安装 Python 2.x 和 Python 3.x

linux - 使用 SCP 命令将文件/文件夹从 Windows 复制到 Linux PC

java - JLabel定位

Python Glade 无法创建 GladeXML 对象

windows - windows平台上如何获取进程发送或接收的数据量?

linux - 打印文件中不以散列开头的所有行,并按特定列过滤

c - 在 execvp 中传递 awk(printf)

java - 在 Photoshop 中为软件设计的 UI