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

10 投票
1 回答
8467 浏览
提问于 2025-04-16 21:03

我刚开始学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()

我想在这个窗口里右键点击,然后弹出一个菜单,里面可以有像“警告”、“复制”、“退出”之类的选项,随便我想放什么都可以。

我该怎么做到呢?

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,你就只响应右键的按下事件。

撰写回答