2011-07-07 21 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:我想答案現在應該涵蓋你是什麼 –