2010-02-13 28 views
1

J'écris un programme de minuterie en Python en utilisant PyGTK. C'est précis à la centième place. En ce moment, j'utilise un label constamment mis à jour. C'est un problème, parce que si je redimensionne la fenêtre pendant que la minuterie est en cours d'exécution, Pango lance le plus souvent une erreur folle et mon programme se termine. Ce n'est pas toujours la même erreur, mais différentes que je suppose sont une forme de tirage raté. En outre, l'étiquette est mise à jour de plus en plus lentement à mesure que j'augmente la taille de la police. Donc, je me demande s'il y a une façon plus correcte d'afficher la minuterie. Existe-t-il une méthode plus stable que la mise à jour permanente d'une étiquette?Comment afficher une minuterie à mise à jour en continu à l'aide de PyGTK?

Répondre

2

J'ai compris le problème. C'était en effet un problème avec les threads. Je ne l'aurais jamais deviné. L'astuce consiste à utiliser gobject.timeout_add() pour créer un timer au lieu d'une boucle threadée. Voici quelques informations sur gobject.timeout_add():

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

Ne pas oublier d'avoir votre retour de la fonction véritable, ou la minuterie arrêtera.

2

La mise à jour d'une étiquette devrait fonctionner de façon parfaitement fiable, donc je suppose que vous faites quelque chose d'autre qui ne va pas. Utilisez-vous des threads? À quoi ressemble votre code? Jusqu'à quel point pouvez-vous condenser votre programme (en supprimant la fonctionnalité, pas en obscurcissant le code), sans que le problème disparaisse?

+0

Oui, l'étiquette est mise à jour à partir d'un thread. Je ne suis pas sûr de ce que vous voulez dire avec la deuxième question, mais je peux retirer beaucoup de choses du programme tout en préservant le problème. La minuterie est en réalité seulement une partie du programme, mais le problème est survenu même s'il n'y avait pas d'autres fonctionnalités présentes. – linkmaster03

+0

Je me méfie toujours des threads et gtk: il est possible, mais difficile, de bien faire les choses. Vos symptômes sonnent comme s'il manquait une paire gtk threads_enter/threads_leave manquante quelque part. –

+0

Mon autre question était motivée par le fait que le processus de minimisation d'un programme, tout en préservant le problème, permet souvent de voir plus facilement le problème. –