我正在尝试使用处理程序在单击按钮时创建 Gtk 弹出菜单,如下所示:
def code_clicked(self,widget,event):
newmenu=Gtk.Menu()
newitem=Gtk.MenuItem('hello')
newmenu.append(newitem)
newitem1=Gtk.MenuItem('goodbye')
newmenu.append(newitem1)
newmenu.show_all()
newmenu.popup(None,None,None,None,event.button,event.time)
return True
菜单永远不会显示。理论上,弹出窗口中的第三个参数 func 将位置设置为光标位置(如果设置为 Null)。我认为问题就在那里,因为如果我将 func 设置为 lambda x,y: (event.x,event.y,True)
,它会在我的光标上方约 100 像素处显示弹出菜单。
我想找到一些方法在我的光标处弹出此菜单。任何帮助将不胜感激!
您需要窗口的根位置。所以
menu.popup(None, None,
lambda menu, data: (event.get_root_coords()[0],
event.get_root_coords()[1], True),
None, event.button, event.time)
应将弹出窗口放在正确的位置。在这里工作。
至于乔恩·布莱克的回答,在 GTK3 中,问题是正确的,请参阅 http://developer.gnome.org/gtk3/3.4/GtkMenu.html#gtk-menu-popup 弃用的 pygtk 绑定只能像您描述的那样工作
您将event.time
作为数据参数传递,该参数又传递给 func 以确定菜单位置。将调用更改为以下内容应该可以解决此问题:
newmenu.popup(None, None, None, event.button, event.time)