Interface graphique en Python 4V748 Enseignement Supérieur Public 26/02/2013 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 1 / 17 Introduction Définition Une interface graphique, c’est : une interface un dispositif destiné à permettre les interactions entre programme et utilisateur, graphique qui présente des informations de façon visuelle et reçoit des messages via une souris (ou autre pointeur). 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 2 / 17 Introduction Pourquoi faire ? Plusieurs raisons pour écrire des programmes graphiques : utilisation agréable résultats plus immédiatement parlants mise en évidence de l’effet d’un paramètre, ... accessible aux personnes peu familières avec les ordinateurs Mais aussi des inconvénients : répétition d’une même séquence d’actions apprentissage peu générique difficile à adapter à un besoin particulier 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 3 / 17 Introduction Modes de fonctionnement Non interactif Interactif en terminal Interactif graphique NB On trouve des programmes mixtes ex. interactif avec lecture de données dans un fichier, graphique avec paramètres lors du lancement, etc. 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 4 / 17 Architecture Architecture d’un programme graphique Au lancement du programme : construction de l’interface boucle d’attente Dans la boucle : chaque action de l’utilisateur appelle une fonction I I I I réglage d’un paramètre (valeur, choix binaire / multiple, ...) lecture de données (fichier, réseau, capteur, ...) traitement (calculs, ...) écriture de résultats (fichier, réseau, affichage, ...) une fonction appelée peut modifier l’affichage une fonction permet de quitter le programme 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 5 / 17 Architecture Élements d’une interface Bouton avec texte Curseur Bouton radio Liste déroulante Menu Espace dessinable etc. 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 6 / 17 Architecture Rassurez-vous... ... nous n’allons pas programmer le dessin de ces objets, ni leur comportement lorsqu’on interagit avec eux ! Nous utiliserons : une bibliothèque graphique adaptée à notre langage de programmation le gestionnaire graphique du système pour une meilleure intégration (thème, langue,...) 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 7 / 17 Architecture Architecture en couches 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 8 / 17 Architecture Architecture en couches : construction 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 9 / 17 Architecture Architecture en couches : fonctionnement 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 10 / 17 Architecture Bibliothèques graphiques PyGTK PyQt Tkinter wxPython 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 11 / 17 Tkinter Caractéristiques de Tkinter Libre, gratuite Portable : Unix, Windows, Mac... Bibliothèque Orientée Objets I I I Un élément graphique ("Widget") = un instance d’une classe Hiérarchie d’objets On peut dériver ses propres objets 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 12 / 17 Tkinter Hiérarchie de classes de Tkinter (extrait) http://knipknap.github.io/exscript/api/class- tree.html 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 13 / 17 Tkinter Le programme Tkinter minimal helloMV448.py from Tkinter import * root = Tk() w = Label(root, text="Hello, MV448 world!") w.pack() root.mainloop() > python helloMV448.py 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 14 / 17 Tkinter Construire son interface Principe : les éléments sont ajoutés un à un avec la méthode pack() MV448_3Butt.py import Tkinter fenetre=Tkinter.Tk() fenetre.title(":-)") zone=Tkinter.Frame(fenetre) boutG=Tkinter.Button(zone,text="Gauche") boutH=Tkinter.Button(zone,text="Haut") boutB=Tkinter.Button(zone,text="Bas") boutG.pack(side=Tkinter.LEFT) boutH.pack(side=Tkinter.TOP) boutB.pack() zone.pack() fenetre.mainloop() 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 15 / 17 Tkinter Callback avec paramètres Principe : on crée un objet MV448_QuitButton.py ... ... MV448_QuitButton.py from Tkinter import * racine=Tk() class AuRevoir: def __init__(self): self.nam=’inconnu’ def fetch(self): self.nam=zt.get() print ’Texte: <%s>’ % self.nam def bye(self): print ’goodbye, ’+self.nam+’.’ import sys sys.exit() zt = Entry(racine) zt.pack(side=TOP, fill=X) ciao=AuRevoir() racine.mainloop() bf = Button(racine, text=’Fetch’, command=ciao.fetch) bf.pack(side=LEFT) bq = Button(racine, text="Quitter", command=ciao.bye) bq.pack(side=RIGHT) > python MV448_QuitButton.py Texte: <Bob> goodbye, Bob. 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 16 / 17 Tkinter 4V748 (Ens Sup Pub) 4V748 : Python Graphique 26/02/2013 17 / 17