如何在 Gtk.TreeView 右键单击​​时显示上下文菜单?

How to display a context menu on Gtk.TreeView right click?

我试图在右键单击 TreeView 中的一行时显示自定义上下文菜单。

treeView.button_press_event.connect ((event) => {
    if (event.type == EventType.BUTTON_PRESS && event.button == 3) {
        Gtk.Menu menu = new Gtk.Menu ();
        Gtk.MenuItem menu_item = new Gtk.MenuItem.with_label ("Add file");
        menu.add (menu_item);
        menu.show ();
    }
});

它没有显示任何内容。如果我在那里调试一条消息,我可以在右键单击 TreeView 中的一行时看到该块正在执行。我试过 show_all () 也没有成功。 popup_at_pointer () 仅适用于 Gtk+ 3.22 及更高版本。我正在使用 Gtk+ 3.18。

有什么方法可以在 Gtk.TreeView 上右键单击某行时显示自定义菜单?

我认为你需要旧款 gtk_menu_popup

发现必须使用 attach_to_widget () and then use show_all () before calling the only method to show the menu available in Gtk+ 3.18 which is popup (...) 将 Gtk.Menu 附加到小部件。 popup (...) 自 Gtk+ 3.22 起已弃用,但它是 Gtk+ 3.18 中唯一可用的方法。

这是代码

treeView.button_press_event.connect ((event) => {
    if (event.type == EventType.BUTTON_PRESS && event.button == 3) {
        Gtk.Menu menu = new Gtk.Menu ();
        Gtk.MenuItem menu_item = new Gtk.MenuItem.with_label ("Add file");
        menu.attach_to_widget (treeView, null);
        menu.add (menu_item);
        menu.show_all ();
        menu.popup (null, null, null, event.button, event.time);
    }
});

相关来源:https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-examples.html.en#treeview-popup-menu-example