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

时间:2018-04-08 08:05:48

标签: gtk3 vala

当我右键单击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上右击一行时,有没有办法显示自定义菜单?

2 个答案:

答案 0 :(得分:1)

我认为您需要较旧的样式gtk_menu_popup

答案 1 :(得分:1)

发现必须使用attach_to_widget ()将Gtk.Menu附加到窗口小部件,然后使用 show_all(),然后再调用显示Gtk + 3.18中可用菜单的唯一方法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