用anoth替换Gtk子菜单

2024-04-18 06:08:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序中有一个子菜单,需要根据从internet下载的信息(在运行时)进行更改。我的当前代码:

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

不幸的是,这不一致地产生了核心转储、segfaults和“double free or corruption(fasttop)”错误。公平地说,我不确定这是否是导致这些错误的原因,但这是我最好的猜测。我无法从核心转储的十六进制地址中提取任何信息。你知道吗

我还尝试过在附加新的子菜单之前先删除旧的子菜单,使用self.exchange_menu.remove(self.exchange_menu.get_submenu())。但这会产生以下错误:

Gtk-CRITICAL **: gtk_container_remove: assertion '_gtk_widget_get_parent (widget) == GTK_WIDGET (container) || GTK_IS_ASSISTANT (container) || GTK_IS_ACTION_BAR (container) || GTK_IS_POPOVER_MENU (container)' failed

你知道我能做什么吗?你知道吗


Tags: selfgtkgetexchangecontainer菜单groupasset