Vous êtes sur la page 1sur 17

Interface graphique

en Python

MV448
Enseignement Supérieur Public

06/03/2013

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 1 / 16


Introduction

Dénition

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).

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 2 / 16


Introduction

Pourquoi faire ?

Plusieurs raisons pour écrire des programmes graphiques :


utilisation agréable
résultats plus immédiatement parlants
mise en évidence de l'eet 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
dicile à adapter à un besoin particulier

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 3 / 16


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 chier, etc.
MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 4 / 16
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 réglage d'un paramètre (valeur, choix binaire / multiple, ...)
I lecture de données (chier, réseau, capteur, ...)
I traitement (calculs, ...)
I écriture de résultats (chier, réseau, achage, ...)
une fonction appelée peut modier l'achage
une fonction permet de quitter le programme

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 5 / 16


Architecture

Élements d'une interface

Bouton avec texte Curseur

Bouton radio Liste déroulante

Menu Espace dessinable

etc.

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 6 / 16


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,...)

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 7 / 16


Architecture

Architecture en couches

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 8 / 16


Architecture

Architecture en couches : construction

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 9 / 16


Architecture

Architecture en couches : fonctionnement

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 10 / 16


Architecture

Bibliothèques graphiques

PyGTK

PyQt

Tkinter

wxPython

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 11 / 16


Tkinter

Caractéristiques de Tkinter

Libre, gratuite
Portable : Unix, Windows, Mac...
Bibliothèque Orientée Objets
I Un élément graphique (" Widget ") = un instance d'une classe
I Hiérarchie d'objets
I On peut dériver ses propres objets

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 12 / 16


Tkinter

Hiérarchie de classes de Tkinter (extrait)

http://www.stud.hig.no/~090285/pydoc/class-tree.html

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 13 / 16


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

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 14 / 16


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()

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 15 / 16


Tkinter

Callback avec paramètres


Principe : on crée un objet
MV448_QuitButton.py ... ... MV448_QuitButton.py
from Tkinter import * racine=Tk()

class AuRevoir: zt = Entry(racine)


def __init__(self): zt.pack(side=TOP, fill=X)
self.nam='inconnu'
def fetch(self): bf = Button(racine, text='Fetch',
self.nam=zt.get() command=ciao.fetch)
print 'Texte: <%s>' % self.nam bf.pack(side=LEFT)
def bye(self):
print 'goodbye, '+self.nam+'.' bq = Button(racine, text="Quitter",
import sys command=ciao.bye)
sys.exit() bq.pack(side=RIGHT)

ciao=AuRevoir() racine.mainloop()

> python MV448_QuitButton.py


Texte: <Bob>
goodbye, Bob.

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 16 / 16


Tkinter

MV448 (Ens Sup Pub) MV448 : Python Graphique 06/03/2013 17 / 16

Vous aimerez peut-être aussi