3

我正在尝试使用如下所示的处理程序在按钮单击时创建一个 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

菜单永远不会出现。理论上,popup 中的第三个参数 func 如果设置为 Null,则将位置设置为光标位置。我认为问题就在那里,因为如果我将 func 设置为lambda x,y: (event.x,event.y,True),它会在光标上方约 100 像素处显示弹出菜单。

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

4

2 回答 2

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 绑定只能像您描述的那样工作

于 2012-07-08T02:58:06.360 回答
1

event.time作为 data 参数传递,该参数又传递给func以确定菜单位置。将您的呼叫更改为以下内容应该可以解决它:

newmenu.popup(None, None, None, event.button, event.time)
于 2012-05-12T19:41:17.187 回答