2011-01-16 2 views
1

Как объясняется here, у меня есть простой значок в трее с помощью PyGTK.Асинхронное обновление значка в пиктограмме PyGTK

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

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

ответ

4

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

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

+0

Это именно то, что мне нужно - спасибо! – AnC

0

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

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

Создает значок состояния отображения a gio.Icon(). Если значок является тематическим значком , он будет обновляться при изменении темы .

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

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

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

Надеюсь, я действительно помог вам здесь.

+0

Спасибо, но простой обработчик тайм-аута (как описано выше) с 'self.statusIcon.set_from_stock (gtk.STOCK_JUSTIFY_FILL)' отлично работал для меня. Я уверен, что столкнусь со всеми проблемами, когда я углубимся в GTK, так что, вероятно, вернемся к этому, когда у меня будет лучшее понимание того, как все сочетается. – AnC

+0

@AnC: Хорошо, я буду рад помочь в любое время, и если вы закончите с заключением, отличным от моего, я буду рад услышать, тогда удачи, и для моего ответа я не читал периодичность, потому что я был так на то, что вы хотите «обновить значок статуса», что я забыл, что ответ был :) Извините за это – mouad

Смежные вопросы