Асинхронное обновление иконки в трее PyGTK - PullRequest
1 голос
/ 17 января 2011

Как объяснено здесь , у меня есть простой значок в трее с использованием PyGTK.

Будучи очень новым для GTK, мне кажется, что gtk.main() является синхронным, блокируя дальнейшую обработку досоответствующий пользовательский интерфейс закрыт.

Так как я могу периодически (например, каждые 5 секунд) обновлять / обновлять значок StatusIcon - нужно ли прибегать к Twisted et al.за это?

Ответы [ 2 ]

4 голосов
/ 17 января 2011

Вы можете использовать gobject.timeout_add() для добавления периодических задач. Первый параметр - это интервал в секундах, второй параметр - это обратный вызов, который вы хотите вызвать. Обратный вызов вызывается до тех пор, пока он возвращает что-то, что оценивается как True, когда используется как bool.

См. Также раздел 20 PyGTK FAQ , в частности вопрос 20,7 .

0 голосов
/ 17 января 2011

Вы не можете легко обновить значок в трее, возьмите его у кого-то, кто уже попробовал это и потерпел неудачу (На самом деле я просто отбрасываю его по причине " Если реализацию сложно объяснить, это плохо идея."),

но вот что у меня есть, чтобы обновить значок состояния, вам нужно будет установить значок состояния, используя метод gtk.status_icon_new_from_gicon(), из doc :

Создает значок состояния, отображающий gio.Icon (). Если значок тематический значок будет обновлен, когда тема меняется.

Таким образом, если вы хотите обновить значок состояния, вам нужно будет создать свой значок, используя значок gio themed , и теперь вы можете напрямую обновлять свой значок темы, и это изменение будет отображаться непосредственно в статусе панели задач. .

Теперь о вашем вопросе:

Да, gtk.main () блокирует ожидание сигнала, так что вам просто нужно привязать сигнал к действию, и когда этот сигнал срабатывает, действие может быть выполнено, для вашего случая в вашем обратном вызове действия вы можете поместить код, который обновит ваше изображение статуса.

Надеюсь, я вам здесь помог.

...