GTK弹出菜单不出现在鼠标位置

时间:2012-05-12 19:15:49

标签: python menu gtk

我正在尝试使用处理程序在按钮单击时创建一个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个像素的弹出菜单。

我想找到一些方法在我的光标处弹出这个菜单。任何帮助将不胜感激!

2 个答案:

答案 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)