使用PyGTK创建右键菜单(上下文菜单)

10

所以我对Python还比较新,已经学了几个月了,但是我正在尝试弄清楚的一件事情是,假设你有一个基本窗口...

#!/usr/bin/env python

import sys, os
import pygtk, gtk, gobject

class app:

   def __init__(self):
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_title("TestApp")
    window.set_default_size(320, 240)
    window.connect("destroy", gtk.main_quit)
    window.show_all()

app()
gtk.main()

我想在这个窗口内右键单击,并弹出一个菜单,就像警告、复制、退出等任何我想添加的内容。

我该如何完成这个操作?


首先,你应该了解GTK如何利用事件。从右键单击开始做一些事情,然后阅读如何制作上下文菜单。我从未使用过PyGTK或GTK,但可能有一个小部件可以实现它。 - JAB
1个回答

13

这里有一个非常好的示例,可以教你如何创建菜单,将其附加到菜单栏,并监听鼠标按钮点击事件并弹出相同的菜单。示例网址为: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,你只会响应鼠标右键的按下事件。


谢谢!这几乎就是我一直在尝试弄清楚的。唯一的问题是菜单会在左键和右键点击时都显示出来,而我不希望它在左键点击时显示出来,但我应该能够解决这个问题。谢谢! - Michael Schwartz
@mikethedj4:你能告诉我/如何定义点击触发弹出菜单吗?谢谢。 - neydroydrec
1
@Benjamin:我认为答案现在应该涵盖你想要的内容。 - James Hurford
是的,抱歉回复晚了。 - Michael Schwartz
我想问一下,有没有可以用来检测菜单未选择任何选项而被关闭的事件?非常感谢。 - Hitesh Kumar Saini
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接