Documente Academic
Documente Profesional
Documente Cultură
I - Introduction..............................................................................................................................................................3
II - Installation de PySide............................................................................................................................................ 3
III - Prsentation des widgets de base....................................................................................................................... 3
III-A - Cration d'une fentre................................................................................................................................. 3
III-B - Cration et utilisation d'un bouton (QPushButton).......................................................................................4
III-C - Cration et utilisation d'une zone de texte non ditable (QLabel)...............................................................4
III-D - Cration et utilisation d'une zone de texte ditable (QLineEdit)..................................................................5
III-E - Cration et utilisation d'une zone de texte multi-lignes (QTextEdit)............................................................ 5
III-F - Conclusion.................................................................................................................................................... 5
IV - Prsentation d'autres widgets usuels................................................................................................................... 5
V - Le point sur les bases de donnes.......................................................................................................................7
V-A - Utilisation du module SQlite 3......................................................................................................................7
V-B - Utilisation du module QtSql.......................................................................................................................... 8
VI - Cration de notre premire application : le carnet d'adresses.............................................................................9
VII - Remerciements.................................................................................................................................................. 10
-2-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
I - Introduction
Le but de ce tutoriel est de permettre une personne familire avec Python et la programmation oriente objet, plus
communment appele OOP (Object-Oriented Programming), de raliser une application graphique fonctionnelle en
Qt et surtout "manuellement". J'entends par l sans passer par QtDesigner.
Lors de la rdaction de ce tutoriel les versions suivantes de Python et PySide taient utilises :
- Python 2.7.1 Windows XP ;
- PySide 1.0.0 beta 1.
Afin d'apprhender le mieux possible ce tutoriel il est impratif d'avoir quelques connaissances en Python. Si cela
n'tait pas le cas, je vous invite lire le tutoriel de G. Swinnen qui traite principalement de Tkinter et des notions
de base de Python.
Aprs avoir lu ce tutoriel, vous devriez tre en mesure de crer une application graphique fonctionnelle avec PySide.
Nous y verrons donc la manire de crer les widgets les plus courants et comment les utiliser. Vous pouvez retrouver
toutes les informations compltes sur les widgets vus ici, sur la documentation officielle de PySide. noter enfin
qu'une grande partie de ce tutoriel est aussi valable pour PyQt, l'autre binding Qt de Python. Il faudra principalement
faire attention aux manires de connecter un widget une action. Nous verrons ceci plus bas.
II - Installation de PySide
Vous trouverez dans la FAQ PyQt & PySide les informations ncessaires aux diverses installations de PySide.
Je vais prsenter ici les widgets indispensables la ralisation d'une application graphique en PySide. Je vais aussi
profiter de ce chapitre pour montrer rapidement ce que nous pouvons faire avec ces widgets. Dans ce chapitre nous
allons donc voir comment :
Afin de crer une fentre, nous utilisons la classe QWidget du module QtGui. Voici comment crer une fentre vide :
#Application de la police d'criture Verdana la fentre mais aussi tous les widgets enfants.
# noter que nous aurions aussi pu choisir la taille et la mise en forme (gras, italique...)
self.setFont(QtGui.QFont("Verdana"))
#Titre de la fentre
self.setWindowTitle("Prsentation PySide... Prsentation des widgets de base")
#Utilisation d'une icne pour la fentre si celui est prsent dans le rpertoire courant...
-3-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
#sinon on passe.
try:
self.setWindowIcon(QtGui.Icon("icon.jpg"))
except:pass
Pour crer un bouton, nous utiliserons la classe QPushButton(string,parent) hrite du module QtGui.
#Cration du bouton
self.quit_0 = QtGui.QPushButton("Quitter\nsans message", self)
#Cration d'une connexion entre le widget QPushButton, le signal clicked et le slot quit.
self.quit_0.clicked.connect(quit)
# noter que quit est un slot prdfini et qu'il permet de quitter l'application proprement.
#Slot est un terme propre Qt. Certains sont prdfinis, d'autres seront crs directement par vous.
#Dans ce cas-
l, il s'agira ni plus ni moins que des fonctions que vous avez rencontres dans votre
#apprentissage de Python.
Nous aurions donc pu aussi crer un bouton activant un slot cr par nous-mme. Nous aurions procd ainsi :
Pour crer une zone de texte non ditable, nous utiliserons la classe QLabel(string,parent) hrite du module QtGui.
#Cration d'un QLabel. Nous le laissons se positionner seul pour avoir un rendu.
#Il se place en haut gauche.
#Ne permet pas l'utilisateur de rentrer du texte.
self.label_0 = QtGui.QLabel("Ceci est un label", self)
-4-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
# noter que setText() et text() fonctionne pour une grande majorit de widgets Qt.
Pour crer une zone de texte ditable, nous utiliserons la classe QLineEdit(string,parent) hrite du module QtGui.
#Cration d'un QLineEdit. Ce widget permet l'utilisateur de rentrer du texte sur une seule ligne.
self.lineedit = QtGui.QLineEdit("Ceci est un LineEdit", self)
Pour crer une zone de texte multi-lignes, nous utiliserons la classe QTextEdit(string,parent) hrite du module QtGui.
III-F - Conclusion
Nous avons donc appris crer une application graphique basique et nous avons maintenant apprhend quelques
notions de base sur les widgets les plus courants. Vous trouverez ici le code regroupant tous les points vus ci-dessus,
plus quelques notions supplmentaires concernant l'utilisation des slots.
exemple
Dans le chapitre suivant nous allons montrer comment crer d'autres widgets qui pourront nous servir lors de la
cration de notre application finale.
Dans ce chapitre nous allons voir comment crer trois nouveaux widgets qui sont :
Afin de crer une barre de menu et une barre de statut, nous n'allons pas faire hriter notre classe Frame d'un QWidget
mais d'un QMainWindow. Son utilisation est identique et on peut de la mme manire y ajouter diffrents widgets.
Nous verrons aussi comment utiliser le QTabWidget. Ce widget permet d'afficher sur notre application plusieurs
onglets indpendant les uns des autres. Il nous permettra donc d'avoir plusieurs "crans" sur le mme, sans avoir
grer plusieurs fentres. Voici le code permettant de crer cette fentre avec ces trois nouveaux widgets :
-5-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
import sys
from PySide import QtCore, QtGui
h = 300
l = 400
class Frame(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.resize(l,h)
self.setFont(QtGui.QFont("Verdana"))
self.setWindowTitle("Prsentation PySide... Prsentation d'autres widgets")
try:
self.setWindowIcon(QtGui.Icon("icon.jpg"))
except:pass
fen = QtGui.QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((fen.width()-size.width())/2, (fen.height()-size.height())/2)
#Cration de deux QWidget qui permettront ensuite de crer les pages du QTabWidget
self.pnl_1 = QtGui.QWidget(self.tabWidget)
app = QtGui.QApplication(sys.argv)
frame = Frame()
frame.show()
sys.exit(app.exec_())
-6-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
Dans la suite de ce tutoriel, nous allons travailler avec des bases de donnes. Il existe plusieurs DBMS (database
management system). Python gre nativement SQlite 3. Pour des raisons de simplicit, nous allons donc baser nos
exemples sur ce DBMS.
Il existe avec PySide/PyQt deux manires de se connecter ce DBMS :
directement ;
en passant par le module QtSql.
Pour des raisons pratiques, nous allons rapidement prsenter ces deux manires de faire. Cela dit, le but de ce
tutoriel n'est pas d'approfondir nos connaissances sur les bases de donnes. Il est donc impratif pour vous d'avoir
un minimum de notions acquises si vous souhaitez aller plus loin.
Dans les lignes suivantes, vous verrez comment crer et travailler avec une base de donnes SQlite 3.
import sqlite3
#Cration d'une nouvelle base de donnes, ainsi que de l'une des ses tables.
#Attention, dans le cas o cette table existe dj, une erreur est
#leve. Il est donc conseill de prvoir cette ventualit.
def create():
conn = sqlite3.connect("mybdd_1.db")
c = conn.cursor()
c.execute('''create table mytable (key TEXT, dep TEXT, projet TEXT)''')
conn.commit()
c.close()
#Lecture de la table
def read():
conn = sqlite3.connect("mybdd_1.db")
c = conn.cursor()
-7-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
Nous avons vu plus haut comment utiliser le module SQlite 3 natif chez Python. Cela dit, Qt permet lui aussi de
manipuler des DBMS sa manire, dont SQlite 3. Le gros avantage avec le module Qt rside dans le fait que la
manire d'crire, d'interroger ou de supprimer des donnes est identique, quel que soit le DBMS choisi. Seule la
manire de s'y connecter diffre. Dans un souci de simplicit et de clart, nous allons utiliser comme DBMS avec QtSql
celui utilis prcdemment. Ce tutoriel n'ayant pas pour but de dcrire prcisment ce qui est faisable avec QtSql,
je vous invite consulter la FAQ correspondante ou la documentation officielle. Cependant nous rappellerons ici,
quelques oprations possibles.
#NOTA : les lignes ci-dessus diffrent entre les diffrents pilotes possibles, notamment avec
#les DBMS plus conventionnels qui se connectent un serveur extrieur l'application
#ncessitant une identification par login et mot de passe par exemple.
# partir de cette tape, les oprations sur les bases de donnes restent identiques
#quel que soit le pilote choisi.
D'autres actions, comme la suppression ou la modification d'entres, seront abordes dans les sources disponibles
dans prochain chapitre.
-8-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
Nous y voici... ce stade du tutoriel, nous avons assez de connaissances pour crer notre premire application. Je
vous propose de concevoir ensemble un carnet d'adresses minimaliste qui devra permettre :
Nous allons donc commencer par crer une fentre deux onglets. Le premier permettra d'entrer un nouveau contact,
le deuxime permettra d'interroger, de modifier et de supprimer le cas chant un contact slectionn. Dans le premier
onglet, pour chaque contact, nous renseignerons :
le nom ;
le prnom ;
le n de tlphone ;
le n de fax ;
l'e-mail ;
l'adresse ;
le code postal ;
la ville.
Il faudra bien penser la mthode choisie pour enregistrer le contact cr. Ces informations seront stockes dans
une table Contact d'une base de donnes crer. Dans le deuxime onglet, le contact voulu sera slectionn via
une liste droulante dans laquelle seront renseigns le nom et le prnom de chaque contact prsent dans la table
Contact de notre base de donnes. Par la suite, nous offrirons l'utilisateur le choix entre Consulter, Modifier ou
Supprimer le contact choisi.
Afin de vous guider, voici des vues de ce que pourrait tre notre application :
-9-
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/
Apprentissage de PySide, le binding Qt de Nokia pour Python et cration d'une premire application par Charles-lie Gentil
exemple
VII - Remerciements
- 10 -
Copyright 2011 Charles-lie Gentil. Aucune reproduction, mme partielle, ne peut tre faite de ce site et 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 intrts.
http://ceg.developpez.com/tutoriels/pyqt/apprentissage-pyside-binding-qt-nokia-pour-python-et-creation-premiere-application/