有一个执行此操作的示例,位于http://www.pygtk.org/pygtk2tutorial/sec-ManualMenuExample.html http://www.pygtk.org/pygtk2tutorial/sec-ManualMenuExample.html
它向您展示了如何创建一个菜单,将其附加到菜单栏,并侦听鼠标按钮单击事件并弹出与创建的菜单完全相同的菜单。
我想这就是你所追求的。
编辑:(添加了进一步的解释以显示如何仅响应鼠标右键事件)
总结一下。
创建一个小部件来监听鼠标事件。在本例中它是一个按钮。
button = gtk.Button("A Button")
创建菜单
menu = gtk.Menu()
用菜单项填充它
menu_item = gtk.MenuItem("A menu item")
menu.append(menu_item)
menu_item.show()
使小部件侦听鼠标按下事件,并将菜单附加到其上。
button.connect_object("event", self.button_press, menu)
然后定义处理这些事件的方法。正如链接中的示例所述,传递给此方法的小部件是您想要弹出的菜单,而不是正在侦听这些事件的小部件。
def button_press(self, widget, event):
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
#make widget popup
widget.popup(None, None, None, event.button, event.time)
pass
您将看到 if 语句检查是否按下了按钮,如果是的话,它将检查按下了哪个按钮。 event.button 是一个整数值,表示按下了哪个鼠标按钮。所以1是左键,2是中键,3是鼠标右键。通过检查 event.button 是否为 3,您仅响应鼠标右键的鼠标按下事件。