Photographie/Thèmes/L'humour
PyQt/Traduction de Qt à PyQt
À ce stade du guide vous devriez déjà avoir un bon aperçu des possibilités de la librairie PyQt.
Cependant, il existe encore une multitude de classes Qt disponibles, permettant entre autre de gérer les dates, de se connecter à une base de données, de faire du traitement d'images, etc.
Néanmoins, l'explication de ces classes sort du cadre de ce document.
Nous vous proposons ici une méthode vous permettant d'appréhender rapidement la documentation Qt afin d'écrire du code python.
En effet, il est relativement aisé d'interpréter la documentation de référence en Python étant donné que la librairie Qt utilise toutes les possibilités de l'orienté objet mis à disposition par le langage C++.
Avec les quelques explications qui suivent vous devriez être en mesure de comprendre l'ensemble de la documentation de référence Qt (http://web.archive.org/web/20031226145340/http://doc.trolltech.com/3.3/groups.html et http://qt-project.org/doc/qt-4.8/classes.html) et créer ainsi vos propres exemples.
S'y retrouver dans la documentation de référence.
La documentation de référence contient une multitude de documents, comme entre autre la documentation de référence sur l'API (regroupée par groupes, annotations, héritages, etc.), quelques tutoriels de base, des explications plus avancées sur les concepts de la librairie, les utilitaires disponibles, etc. La partie qui nous intéresse ici pour obtenir de la documentation sur les modules disponibles est la section intitulée "API Reference".
Elle contient les sections suivantes :
Importer les librairies.
Comme vous avez sûrement dû le remarquer, la première étape consiste en l'importation des librairies Qt.
Elle est effectuée par l'intermédiaire des lignes suivantes :
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
Il est certes peu performant pour le démarrage de votre application d'importer l'ensemble des librairies Qt, cependant, pour le côté pratique de la chose nous le recommandons tout de même.
Libre à vous de chercher après coup les modules utilisés et d'inclure seulement ceux nécessaires.
Soyez néanmoins conscient que l'ensemble de la librairie Qt sera chargée en mémoire, car la version 3 est encore une librairie monolithique.
La version 4 ne souffre plus de ce « problème ».
Comprendre la documentation d'une classe.
La page de documentation contient beaucoup d'informations concernant la classe.
Elle commence par une petite explication sur ce que fait la classe sélectionnée.
Vient ensuite une ligne indiquant le fichier d'entête C++ à inclure.
Par exemple :
Cette ligne est simplement à ignorer en Python.
Elle indique en effet au compilateur C++ dans quel (s) fichier (s) sont définis les prototypes des classes utilisées.
Vous pouvez par contre vous baser sur cette information pour créer les lignes d'importation des modules Python.
Viennent ensuite les méthodes disponibles pour la classe.
Les méthodes qui ne retournent aucune valeur et dont le nom est identique à la classe sont les constructeurs.
Il en existe plusieurs, permettant de mettre des paramètres à l'objet nouvellement créé.
Afin de les utiliser en Python il suffit de les appeler avec les bons paramètres.
Ne prenez pas garde au mot clé codice_1 devant un paramètre, de même que les caractères & et * qui n'ont pas de sens en Python.
Ce qui est important est uniquement le type du paramètre.
Lorsqu'un paramètre contient le caractère = cela veut dire qu'il a une valeur par défaut si elle n'est pas spécifiée dans l'appel au constructeur.
Si vous désirez prendre la valeur par défaut d'un paramètre il faudra le spécifier avec le mot clé réservé None.
Cependant, vous pouvez ne pas spécifier les paramètres par défaut après le dernier paramètre vous intéressant.
Un exemple est le suivant :
grp = QCheckBox("checkbox 1", None, "check1")
Le reste des méthodes sont des méthodes applicables à la classe, à appeler soit en préfixant la méthode par l'objet sur lequel vous désirez l'appliquer, soit en utilisant le mot réservé self qui indique l'objet courant.
La documentation de référence liste ensuite les signaux et les "slots" disponibles.
Il y a peu de choses à retenir à ce sujet à part le fait que pour leur utilisation il faut obligatoirement utiliser le prototype C++ et non pas le convertir en python.
Par exemple, si vous avez un signal défini comme tel :
void dockWindowPositionChanged ( QDockWindow * dockWindow )
Son utilisation dans une méthode codice_2 se fera de la manière suivante :
app.connect(qApp, SIGNAL("dockWindowPositionChanged(QDockWindow *)"),
qApp,SLOT("quit()"))
Code C++ en Python.
Dans la documentation de référence il se trouve quelques exemples mettant en œuvre des classes
Qt. Afin de traduire le code C++ en Python, vous pouvez appliquer les quelques règles suivantes :
Sous-classe implantant une classe Qt.
La méthode la plus simple pour utiliser un objet d'une classe spécifique est de créer directement un objet de cette classe.
Il suffit de faire appel au constructeur de la classe en question en lui passant les paramètres corrects pour obtenir un objet.
Cependant, il peut être utile de définir vos propres classes qui héritent d'une ou de plusieurs classes Qt afin de spécialiser le comportement de certains widgets, voire de définir votre propre widget.
Pour cela, l'étape la plus important est l'appel au (x) constructeur (s) de la (des) classe (s) parente (s).
Une fois ces appels effectués vous aurez alors l'ensemble des méthodes des parents à disposition.
L'utilisation de votre widget n'est ensuite pas différente de l'utilisation de n'importe quel objet Python.
Définir ses propres signaux et "slots".
Comme vu dans la partie concepts de base, les signaux et les "slots" sont extrêmement puissants et simples à utiliser.
À l'instar de C++ où il faut passer par un compilateur méta-objet pour transformer les signaux et "slots" en fonctions C++, en Python il n'en est rien.
Les signaux sont de simples chaînes de caractères, tandis que pour définir un "slot" il suffit de définir une méthode sur la classe voulue.
Notez tout de même un point important : si vous désirez dans un de vos propre widget connecter un des signaux et des "slots" mais que vous n'avez pas de référence vers l'objet codice_9 définissant l'application dans son ensemble, vous pouvez utiliser la variable codice_10, qui est une référence automatiquement convertie vers codice_9.

Retardateur
PyQt/QApplication
Description.
La classe codice_1 s'occupe de gérer l'ensemble des paramètres et des affichages d'une application Qt. Elle contient entre autre la boucle principale de traitement des événements. 
Cette boucle est une boucle infinie à mettre à la fin de votre code afin que votre programme fonctionne
et traite les événements de l'utilisateur ou des objets internes.
Il est important de noter que pour chaque application Qt il y a une et une seule instance de
QApplication, qu'il y ait 0, 1, 2 ou plus de fenêtres dans votre application. De plus, l'objet QApplication
s'occupant d'initialiser l'ensemble de l'application (voir le paragraphe suivant pour
plus de détails), il est important qu'il soit créé avant tout autre objet ayant un rapport avec
l'interface.
Voici les responsabilités de QApplication :
L'ensemble des ces fonctions peuvent être modifiées ou utilisées par l'appel à des méthodes sur
l'objet de type QApplication. Pour cela nous vous laissons consulter la documentation de référence
de la classe à l'adresse .
Constructeur.
QApplication ( int argc, str argv )
QApplication ( int argc, str argv, bool GUIenabled )
Exemple.
Nous vous laissons consulter les autres exemples de ce guide pour voir comment utiliser cette
classe. En effet, vu son caractère obligatoire pour obtenir une application elle est utilisée dans tous nos exemples.