重建一个复杂的 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")
程序多次重建菜单。这是你的问题。我没有进一步深入这个问题。
我有一个 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")
程序多次重建菜单。这是你的问题。我没有进一步深入这个问题。