Меню правого клика (контекстное меню) с использованием PyGTK

Итак, я до сих пор довольно новичок в 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

Есть пример, чтобы сделать это, найденное в http://www.pygtk.org/pygtk2tutorial/sec-ManualMenuExample.html

Он показывает вам, как создать меню, присоединить его к строке меню, а также прослушать событие нажатия кнопки мыши и всплывающее меню, которое было создано.

Я думаю, что это то, что вам нужно.

EDIT: (добавлено дополнительное объяснение, чтобы показать, как реагировать только на события правой кнопки мыши)

Подводя итог.

Создайте виджет для прослушивания событий мыши. В этом случае это кнопка.

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