Как отображать постоянно обновляемый таймер с помощью PyGTK?

1

Я пишу программу таймера в Python, используя PyGTK. Это точно до сотых. Прямо сейчас, я использую постоянно обновляемую этикетку. Это проблема, потому что, если я изменяю размер окна во время работы таймера, Pango чаще всего бросает какую-то сумасшедшую ошибку, и моя программа завершается. Это не всегда одна и та же ошибка, но разные, которые я предполагаю, являются одной из форм неудачной ничьей. Кроме того, ярлык обновляется медленнее и медленнее, когда я увеличиваю размер шрифта.

Итак, мне интересно, есть ли более правильный способ отображения таймера. Есть ли более стабильный метод, чем постоянное обновление метки?

Теги:
gtk
pygtk
pango

2 ответа

2
Лучший ответ

Я понял проблему. Это была действительно проблема с потоками. Я никогда бы не догадался об этом. Хитрость заключается в использовании gobject.timeout_add() для создания таймера вместо поточного цикла. Вот некоторая информация о gobject.timeout_add():

http://faq.pygtk.org/index.py?req=show&file=faq01.021.htp

Не забудьте вернуть функцию True, или таймер остановится.

2

Обновление ярлыка должно работать совершенно надежно, поэтому я подозреваю, что вы делаете что-то еще неправильно. Вы используете потоки? Как выглядит ваш код? Насколько мала вы можете сконденсировать свою программу (путем удаления функциональности, а не путем запутывания кода), не устраняя проблему?

  • 0
    Да, ярлык обновляется из потока. Я не уверен, что вы получите со вторым вопросом, но я могу вынести много вещей из программы, сохраняя проблему. Таймер на самом деле является только частью программы, но проблема возникала, даже когда других функций не было.
  • 0
    Я всегда с подозрением отношусь к темам и gtk: это возможно, но трудно, сделать это правильно. Ваши симптомы звучат так, будто отсутствует пара gtk threads_enter / threads_leave.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню