coagul : Python et QT (tutoriel 2)
Créé par Jean-Emmanuel Bissey le 06/11/2025 PubliéRubrique : Débutants
Le : mardi 28 février 2006
Par : jibux
Visites : 178
Dans le tutoriel précédent, nous avons créé notre première application PyQt. Dans cet article, nous allons en fabriquer une nouvelle qui nous permettra de commencer à découvrir Python.
Éléments abordés dans ce document
Les tuples « avec () »
Le transtypage « avec float() et `` »
Le formatage des chaînes de caractères « avec %»
Au travail
Maintenant que vous connaissez QT designer vous devriez pouvoir créer ceci
Pour plus de détails vous pouvez consulter ce site
Détail de l’implémentation
Pour cette application, je vais utiliser les tuples comme un tableau à 2 dimensions. Ce n’est peut-être pas la manière la plus élégante d’un point de vue Pythonien, mais pour l’instant je manque d’expérience sur le sujet. Et je dois reconnaître qu’on ne sort pas indemne de nombreuses années de développement en C puis PHP ;-). L’idée consiste à remplacer les switchs proposés dans le code C++ par cette structure de données. (voir Coding the Dialog)
J’utilise donc un tuple de tuples (le tableau à 2 dimensions). La première donnée du tuple interne correspond à l’indice de l’élément de la ListBox. La seconde correspond à la valeur numérique associée.
Python est un langage qui interdit de mélanger les choux et les carottes. Il faut convertir les types incompatibles qu’on voudrait associer. Cela évite certains bugs liés à des conversions implicites mal maitrisées. C’est pourquoi j’utilise float() pour transformer le texte de numberLineEdit ainsi que ` ` pour transformer decimals en chaîne de caractère.
Pour le formatage du texte on utilise %. Celui-ci fonctionne avec une chaine de formatage et une liste de valeurs. Les habitués de la fonction sprintf() du C ne seront pas dépaysés. Pour les autres, vous pouvez consulter l’aide en ligne de la fonction cprintf. (oui c’est pour du PHP mais je ne connais pas encore un site équivalent pour Python)
Voici donc le fichier conversionform.ui.h
void ConversionForm::convert()
{
fromComboBoxList = ((0, 1000000.0), (1,1000.0), (2,10.0), (3, 1.0))
toComboBoxList = ((0, 63360.0), (1, 36.0), (2, 12.0), (3, 1.0))
# internally convert the input to millimeters
scaledInput = float(self.numberLineEdit.text().ascii()) * fromComboBoxList[self.fromComboBox.currentItem()][1]
#convert to inches
result = scaledInput * 0.0393701 / toComboBoxList[self.toComboBox.currentItem()][1]
# set the result
decimals = self.decimalsSpinBox.value()
self.resultLineEdit.setText(("%."+`decimals`+"f") % result)
}
Il faut maintenant créer le fichier myconvert.py qui va utiliser cette boite de dialogue
from qt import *
from conversionform import *
import sys
if __name__ == "__main__":
app = QApplication(sys.argv)
f = ConversionForm()
f.show()
app.setMainWidget(f)
app.exec_loop()
Puis lancer la compilation avec $ pyuic conversionform.ui > conversionform.py
Et finalement $ python myconvert.py
Historique des modifications
Version Date Commentaire
0.1 26/02/2006 Création par Jibux