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