2011-07-07 20 views
9

所以我还是比较新的Python,并已学习了几个月,但我想弄清的一件事是说你有一个基本的窗口...Python右键菜单使用PyGTK

#!/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() 

我想这个窗口中单击鼠标右键,并有一个菜单弹出警报一样,复制,出口,不管我感觉放下。

我将如何实现这一目标?

+0

首先,你应该在GTK如何利用事件读了。从右键单击开始,然后阅读如何执行上下文菜单。我从来没有使用PyGTK或GTK,但可能有一个小部件。 – JAB

回答

12

没有这样做,在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,您只响应鼠标右键的鼠标按下事件。

+0

谢谢!这几乎正​​是我一直想弄清楚的。唯一的问题是菜单显示在左键单击,也是正确的。我不希望它显示在左键点击,但我应该能够解决这个问题。谢谢! –

+0

@ mikethedj4:请问您是否/如何定义触发弹出菜单的点击?谢谢。 – Benjamin

+1

@Benjamin:我想答案现在应该涵盖你是什么 –