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