PySide Simplissimus : fermer

PySide Simplissimus : des tutoriels d'une dizaine de minutes pour un débutant par un débutant

| Traducteur : Thibaut Cuvelier | Qt Developer Network |

Ceci ne vous prendra pas plus de cinq minutes : le but de ce programme est de faire en sorte qu'un clic sur le pushButton arrête l'exécution de ce programme. Comme toujours, on commence dans le Qt Designer. On appelle le programme d'une manière plutôt fleurie, quitter, ainsi le designer crée une MainWindow avec un bouton qui est enregistré en tant que quitter.ui.

Commentez

- Titre : PySide Simplissimus : fermer

- Auteurs : Traducteur : Thibaut Cuvelier, Qt Developer Network

- Parution : 14 mai 2011

- Mise à jour : 7 septembre 2011

- Licence : Copyright ® 2011 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. L'article original

- II. Fermer

- III. Remerciements

I - L'article original

Le Qt Developer Network est un réseau de développeurs utilisant Qt afin de partager leur savoir sur ce framework. Vous pouvez le consulter en anglais.

Nokia, Qt, Qt Quarterly et leurs logos sont des marques déposées de Nokia Corporation en Finlande et/ou dans les autres pays. Les autres marques déposées sont détenues par leurs propriétaires respectifs.

Cet article est la traduction de Close.

II - Fermer

Le fichier Qt Designer est disponible. On peut le transformer en fichier Python exécutable :

pyside-uic quitter.ui -o ui_quitter.py

Une fois le code généré, on peut l'utiliser :

#!/usr/bin/env python
# quitter.py - provide a button to quit this "program"

import sys

from PySide.QtGui import QMainWindow, QPushButton, QApplication

from ui_quitter import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)

if __name__ == '__main__':
app = QApplication(sys.argv)
frame = MainWindow()
frame.show()
app.exec_()

Juste pour que ce soit difficile, on a utilisé une procédure alternative pour créer une forme lisible par Python du fichier ui_quitter.py. Le nom de fichier est pratique, car il suffit de se souvenir d'un seul nom : quitter.

Note : si vous n'avez pas les setuptools installés, vous recevrez cette erreur lors de l'exécution de pyside-uic :

Traceback (most recent call last):
File "c:\Python26\Scripts\pyside-uic-script.py", line 5, in <module>
from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

Les setuptools sont librement disponibles.

En lançant le programme, vous trouverez qu'il peut être fermé de la manière habituelle par la croix ou bien en cliquant sur le bouton. Voici une image de la GUI :

Maintenant, regardons de plus près le code. Où est le code qui fait que le bouton ferme le programme ? Ce n'est sûrement pas dans le listing.

La raison de cette absence est qu'il a été créé par Qt Designer, qui possède un éditeur de signaux et de slots. On l'a utilisé de manière furtive pour connecter le « signal » PushButton.click() au « slot«  MainWindow.close(). Il est inclus dans le fichier quitter.ui et, suite à la conversion, dans ui_quitter.py. Depuis ce fichier, on importe la classe Ui_MainWindow, l'un des ancêtres de notre classe MainWindow. On utilise l'héritage multiple de Python pour faciliter l'utilisation des méthodes dans le module ui_quitter.py.

Il y a toujours d'autres manières de procéder et on pourrait éviter le double héritage, mais pourquoi ne pas l'utiliser quand il est bien commode ? L'hérité creuse de plus en plus profondément dans l'héritage et initialise l'ancêtre immédiatement au-dessus de MainWindow et ainsi l'arbre tout entier.

Vous remarquerez que la méthode init de MainWindow spécifie l'ancêtre à None. C'est le genre d'indication que l'on donne à PySide pour dire que MainWindow est bien la fenêtre principale du programme.

III - Remerciements

Merci à Claude Leloup et djibril pour leur relecture attentive !