2011-07-07 9 views
9

Vì vậy, tôi vẫn còn khá mới với Python, và đã học được một vài tháng, nhưng một điều tôi đang cố gắng tìm ra là nói rằng bạn có một cửa sổ cơ bản ...Python Right Click Menu Sử dụng 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() 

Tôi muốn nhấp chuột phải vào bên trong cửa sổ này và có một menu bật lên như cảnh báo, sao chép, thoát, bất kỳ điều gì tôi muốn đặt xuống.

Làm cách nào để thực hiện điều đó?

+0

Trước hết, bạn nên đọc về cách GTK sử dụng các sự kiện. Bắt đầu bằng cách nhấp chuột phải để làm điều gì đó, sau đó đọc về cách thực hiện các menu ngữ cảnh. Tôi chưa bao giờ sử dụng PyGTK hoặc GTK, nhưng có lẽ là một tiện ích cho nó. – JAB

Trả lời

12

Có một ví dụ để làm điều này rất tìm thấy tại http://www.pygtk.org/pygtk2tutorial/sec-ManualMenuExample.html

Nó cho bạn thấy làm thế nào để tạo ra một thực đơn đính kèm nó vào một thanh menu và cũng nghe cho một sự kiện nút chuột nhấp chuột và bật lên trình đơn rất giống nhau đã được tạo ra.

Tôi nghĩ rằng đây là những gì bạn đang làm sau.

EDIT: (thêm giải thích thêm để hiển thị cách chỉ phản hồi với các sự kiện nút chuột phải)

Để tóm tắt.

Tạo tiện ích con để nghe sự kiện trên chuột. Trong trường hợp này, đó là một nút.

button = gtk.Button("A Button") 

Tạo một menu

menu = gtk.Menu() 

Điền nó với các mục menu

menu_item = gtk.MenuItem("A menu item") 
menu.append(menu_item) 
menu_item.show() 

Hãy widget nghe cho các sự kiện chuột bấm, gắn menu để nó.

button.connect_object("event", self.button_press, menu) 

Sau đó, xác định phương thức xử lý các sự kiện này. Như được nêu trong ví dụ trong liên kết, tiện ích được truyền cho phương thức này là menu bạn muốn bật lên chứ không phải tiện ích đang lắng nghe những sự kiện này.

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 

Bạn sẽ thấy rằng nếu kiểm tra tuyên bố để xem nếu nút được nhấn, nếu đó là sự thật thì nó sẽ kiểm tra xem các nút được nhấn. Event.button là một giá trị số nguyên, đại diện cho nút chuột nào được nhấn. Vì vậy, 1 là nút bên trái, 2 là giữa và 3 là nút chuột phải. Bằng cách kiểm tra xem event.button có phải là 3 hay không, bạn chỉ trả lời các sự kiện nhấn chuột cho nút chuột phải.

+0

Cảm ơn! Đó là gần như chính xác những gì tôi đã cố gắng tìm ra. Chỉ có vấn đề mặc dù trình đơn hiển thị trên nhấp chuột trái, cũng như bên phải. Trong đó tôi không muốn nó hiển thị trên nhấp chuột trái, nhưng tôi sẽ có thể khắc phục điều đó. Cảm ơn! –

+0

@ mikethedj4: bạn có thể vui lòng cho biết/cách bạn đạt được để xác định nhấp chuột kích hoạt trình đơn bật lên không? Cảm ơn. – Benjamin

+1

@ Benjamin: Tôi nghĩ câu trả lời bây giờ sẽ bao gồm những gì bạn đang có sau –