IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Apprendre à utiliser le module Python PyGTK 2.0


précédentsommairesuivant

XIX. Chapitre 19. Temporisations, Entrées/Sorties et fonctions d'inactivité

XIX-A. Temporisations

On peut se demander comment faire effectuer un travail utile à GTK quand on est dans la fonction main(). Eh bien, on dispose de plusieurs options. En utilisant la fonction suivante du module gobject, on peut créer une fonction de temporisation qui sera appelée tous les "intervalle" millisecondes.

 
Sélectionnez
  source_id = gobject.timeout_add(intervalle, fonction, ...)

Le paramètre intervalle représente le nombre de millisecondes entre deux appels à notre fonction. Le paramètre fonction est la fonction de rappel que l'on souhaite appeler. Tout argument suivant le deuxième est transmis à la fonction comme données. La valeur de retour "source_id" est un nombre entier qui peut être utilisé pour supprimer la temporisation en appelant :

 
Sélectionnez
  gobject.source_remove(source_id)

Il est aussi possible d'empêcher un nouvel appel de la temporisation en renvoyant zéro ou FALSE depuis le rappel. Si on veut que le rappel soit réutilisé, il faut retourner TRUE.

Le rappel doit ressembler à ceci :

 
Sélectionnez
  def rappel_temporisateur(...):

Le nombre d'arguments de la fonction de rappel doit être égal au nombre d'arguments de données indiqués dans la fonction timeout_add().

XIX-B. Contrôler les Entrées/Sorties

On peut vérifier la capacité à lire ou écrire un fichier (un fichier Python ou un fichier de bas niveau du système d'exploitation) et invoquer alors automatiquement un rappel. Ceci est surtout utile pour les applications réseau. La fonction de module gobject :

 
Sélectionnez
  source_id = gobject.io_add_watch(source, condition, rappel)

où le premier argument (source) représente le fichier ouvert (un entier, descripteur du fichier Python ou du fichier système de bas niveau) que l'on veut surveiller. La fonction gobject.io_add_watch() utilise l'entier descripteur du fichier de bas niveau de manière interne, mais l'extraira de l'objet fichier Python par la méthode fileno() si nécessaire. Le deuxième argument (condition) précise ce que l'on veut contrôler. Ce peut être :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  gobject.IO_IN - Des données sont disponibles en lecture.

  gobject.IO_OUT - Le fichier est prêt pour une écriture.

  gobject.IO_PRI - Il y a des données urgentes à lire dans le fichier.

  gobject.IO_ERR - Condition d'erreur.

  gobject.IO_HUP - Blocage (la connexion est rompue, habituellement pour les 
                   pipes et sockets).

Celles-ci sont définies dans le module gobject. Comme vous l'avez déjà compris, le troisième argument, rappel, est la fonction que l'on souhaite appeler lorsque les conditions précédentes sont remplies.

La valeur de retour source_id peut être utilisée pour arrêter le contrôle du fichier grâce à la fonction suivante :

 
Sélectionnez
  gobject.source_remove(source_id)

La fonction de rappel doit ressembler à :

 
Sélectionnez
  def rappel_entree(source, condition):

source et condition sont tels que décrits précédemment. La valeur de source sera le descripteur de fichier de bas niveau et non l'objet fichier Python (c.-à-d. la valeur retournée par la méthode de fichier Python fileno()).

On peut aussi empêcher la fonction de rappel d'être à nouveau utilisée en renvoyant zéro ou FALSE depuis le rappel. Si on veut que le "callback" soit réutilisé, il doit retourner TRUE.

XIX-C. Les fonctions d'inactivité

Que faire si on souhaite appeler une fonction quand rien d'autre ne se passe ? Il faut utiliser la fonction :

 
Sélectionnez
  source_id = gobject.idle_add(rappel, ...)

Tous les arguments suivants le premier (indiqué par ...) sont transmis au rappel dans le même ordre. La valeur de retour source_id nous fournit une référence au gestionnaire.

Cette fonction entraine l'appel de la fonction indiquée rappel par GTK quand rien d'autre ne se passe.

Le rappel a la forme :

 
Sélectionnez
  def rappel(...):

où les arguments transmis à la fonction rappel sont les mêmes que ceux qui ont été indiqués dans la fonction gobject.idle_add(). Comme pour les autres fonctions de rappel, renvoyer FALSE empêchera le rappel d'inactivité d'être appelé et renvoyer TRUE permet à la fonction de rappel d'être rappelée à la prochaine période d'inactivité.

Une fonction d'inactivité peut être supprimée de la queue par la fonction :

 
Sélectionnez
  gobject.source_remove(source_id)

où le paramètre source_id est la valeur retournée par la fonction gobject.idle_add().


précédentsommairesuivant

Copyright © 2005 John Finlay. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.