Как подключить сигналы «показывать» и «скрывать» с помощью PyGTK?

#python #gtk #pygtk

#python #gtk #pygtk

Вопрос:

Я хотел бы, чтобы обратный вызов вызывался, когда какой-либо виджет ( Menu ) показан или скрыт. Поступая таким образом :

 menu = gtk.Menu()
menu.connect("show", self.menu_show, menu)
menu.connect("hide", self.menu_hide, menu)
  

Функции обратного вызова никогда не вызываются. Являются ли сигналы show и hide теми , которые я ищу ? Они особенные? Есть ли что- то , чего мне не хватает, чтобы это заработало?

Комментарии:

1. Как «показать» или «скрыть» это меню? используете ли вы метод menu.popup?

2. У меня нет контроля над этой частью, это для индикатора приложения Ubuntu: wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators (смотрите фрагмент кода Python внизу).

Ответ №1:

Я думаю, что эти сигналы передаются только при вызове соответствующих методов объекта. Если вы хотите подключиться к моменту (повторного) рисования виджета, воспользуйтесь сигналом события expose. Но зачем вам это вообще нужно? Меню предназначено для предоставления пользователю выбора действий, а не для запуска некоторого кода настройки / демонтажа, когда он показан / скрыт.

Комментарии:

1. Контекст довольно специфичен, содержимое меню должно обновляться каждую секунду. Я хочу, чтобы это периодическое обновление происходило только при необходимости, то есть когда меню видно пользователю.

2. Я не уверен, но «видимость-уведомление-событие», вероятно, должно это сделать.

3. Только что попробовал подключить все сигналы из виджета. Ни один из них не работает, поэтому я, вероятно, упускаю что-то очевидное здесь. Работают только события «активировать» в пунктах меню.

4. Почему бы не подключиться к элементу меню: если он виден, это то же самое, как если бы меню было видимым, верно?

5. После изучения этого, все эти ограничения присущи Ubuntu AppIndicators… Смотрите askubuntu.com/questions/16431 /… . В любом случае спасибо за помощь!