Меню правого клика (контекстное меню) с использованием PyGTK - PullRequest
10 голосов
/ 07 июля 2011

Так что я все еще довольно новичок в 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 Ответ

12 голосов
/ 08 июля 2011

Пример того, как это сделать, можно найти на 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, вы реагируете только на события нажатия мыши для правой кнопки мыши.

...