重建一个复杂的 Gtk 菜单

Rebuilding a complex Gtk Menu

我有一个 Ubuntu 程序,它显示一个复杂的 Gtk 菜单,最多有 4 个嵌套级别,总共有超过 100 个菜单项(我知道这并不优雅)。菜单项代表数据库中的项目,当此数据发生变化时,需要重建菜单。

所以我有一个函数可以处理这个:

def rebuild_asset_menu(self):
    self.asset_menu.set_submenu(self._menu_bases())
    GLib.idle_add(self.asset_menu.show_all)

self.asset_menu 是附加大量子菜单的菜单项。 self._menu_bases() 构建子菜单结构并 returns 它。

菜单结构的构建在程序启动时运行得非常好。但是当调用上面的代码来更新子菜单(本质上是用新的子菜单替换它)时,GUI 变得非常慢并且菜单经常是空的。

是我的菜单元素太多了,还是我做错了什么?还是Unity?

如果我将你的代码修改成这样:

def rebuild_asset_menu(self):
    print ("rebuild")
    self.asset_menu.set_submenu(self._menu_bases())
    print ("rebuild1")
    self.asset_menu.show_all()
    print ("rebuild2")

程序多次重建菜单。这是你的问题。我没有进一步深入这个问题。