我正在尝试使用处理程序在按钮单击时创建一个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
菜单永远不会出现。从理论上讲,如果设置为Null,则弹出窗口中的第三个参数func将位置设置为光标位置。我认为问题出在那里,因为如果我将func设置为lambda x,y: (event.x,event.y,True)
,它会在我的光标上方显示大约100个像素的弹出菜单。
我想找到一些方法在我的光标处弹出这个菜单。任何帮助将不胜感激!
答案 0 :(得分:4)
您需要窗口的根位置。 所以
menu.popup(None, None,
lambda menu, data: (event.get_root_coords()[0],
event.get_root_coords()[1], True),
None, event.button, event.time)
应该将弹出窗口置于正确的位置。在这里工作。
关于Jon Black的回答,在GTK3中,问题是正确的,请参阅http://developer.gnome.org/gtk3/3.4/GtkMenu.html#gtk-menu-popup弃用pygtk绑定只能像你描述的那样工作
答案 1 :(得分:1)
您传递event.time
作为数据参数,然后传递给 func 以确定菜单位置。将您的呼叫更改为以下内容应该解决它:
newmenu.popup(None, None, None, event.button, event.time)