我的应用程序中有一个子菜单需要根据从互联网上下载的信息进行更改(在运行时)。我目前的代码:
def rebuild_asset_menu(self):
self.exchange_menu.set_submenu(self._menu_exchange()) # returns a GtkMenu
self.exchange_menu.show_all()
def _menu_exchange(self):
exchange_list_menu = Gtk.Menu()
self.exchange_group = []
subgroup = [] # group all asset pairs of all exchange menus together
for exchange in self.coin.EXCHANGES:
item = Gtk.RadioMenuItem.new_with_label(self.exchange_group, exchange.get('name'))
item.set_submenu(self._menu_asset_pairs(exchange, subgroup))
item.connect('toggled', self._handle_toggle, exchange.get('code'))
self.exchange_group.append(item)
exchange_list_menu.append(item)
if self.active_exchange == exchange.get('code'):
item.set_active(True)
return exchange_list_menu
不幸的是,这不一致地产生了核心转储,段错误和"双重免费或腐败(快速顶部)"错误。公平地说,我不确定这是否是造成这些错误的原因,但这是我最好的猜测。我无法从核心转储中的那些十六进制地址中做任何事情。
我还尝试在使用self.exchange_menu.remove(self.exchange_menu.get_submenu())
添加新子菜单之前先删除旧的子菜单。但是这给出了以下错误:
Gtk-CRITICAL **:gtk_container_remove:断言' _gtk_widget_get_parent(widget)== GTK_WIDGET(容器)|| GTK_IS_ASSISTANT(容器)|| GTK_IS_ACTION_BAR(容器)|| GTK_IS_POPOVER_MENU(容器)'失败
任何想法我能做什么?