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

Galerie