使用 PyGTK 的右键单击菜单(上下文菜单)

Posted

技术标签:

【中文标题】使用 PyGTK 的右键单击菜单(上下文菜单)【英文标题】:Right Click Menu (context menu) using PyGTK 【发布时间】:2011-09-30 18:29:45 【问题描述】:

所以我对 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,但可能有一个小部件。 【参考方案1】:

在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,您仅响应鼠标右键的鼠标按下事件。

【讨论】:

谢谢!这几乎正​​是我一直试图弄清楚的。唯一的问题是菜单在左键单击时显示,以及在右键单击时显示。我不希望它在左键单击时显示,但我应该能够解决这个问题。谢谢! @mikethedj4:您能否说明您是否/如何实现定义触发弹出菜单的点击?谢谢。 @Benjamin:我认为答案现在应该涵盖你所追求的目标 是的,很抱歉这么长的回复。 popup 原型现在看起来像 popup(parent_menu_shell, parent_menu_item, func, data, button, activate_time)

以上是关于使用 PyGTK 的右键单击菜单(上下文菜单)的主要内容,如果未能解决你的问题,请参考以下文章

vs代码中的右键上下文菜单立即执行

哪些注册表命令允许我从包含撇号的文件夹的右键单击上下文菜单中以管理员身份运行 PowerShell 5 / CMD?

在java中右键单击上下文菜单获取目标名称div变量

使用 ToolsAPI 将菜单项添加到 Delphi IDE 中单元的选项卡上下文菜单

右键单击 datagridview 的上下文菜单

右键单击之前不应用上下文菜单样式