#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 /… . В любом случае спасибо за помощь!