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