SlideShare une entreprise Scribd logo
IN20 Informatique
Séance 4
Interface graphique
et programmation évènementielle
Sébastien Combéfis, Quentin Lurkin lundi 5 octobre 2015
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Rappels
Classe
Définition d’une classe (variable d’instance et constructeur)
Définition d’un constructeur et instanciation d’un objet
Définition de méthode et appel
Programmation orientée objet
Représentation d’un objet avec __str__
Surcharge d’opérateur
Égalité des objets (==) et des identités (is)
Accesseur et mutateur
3
Objectifs
Interface graphique
Construction d’une interface graphique
Widgets graphiques
Programmation évènementielle
Boucle d’évènement
Action et gestionnaire d’évènement
Canvas et animation
4
Interface graphique
Graphical User Interface
Utilisation de la librairie graphique Tk pour les GUI
Importation de tkinter
Création d’une nouvelle fenêtre avec un objet Tk
Titre changé via la méthode title
1 from tkinter import *
2
3 window = Tk()
4 window.title(’LoL’)
5 window.mainloop ()
6
Widget
Interface graphique construite à partir de widgets
Composants tels que label, bouton, fenêtre, liste, case à cocher...
Widgets placés les uns dans les autres
Chaque composant a un composant parent
7
Label
Un label est une zone de texte non modifiable
On définit son texte avec le paramètre text
1 window = Tk()
2
3 text = Label(window , text=’Bonjour Clémence!’)
4 text.pack ()
5
6 window.mainloop ()
8
Bouton
Un bouton peut être cliqué pour déclencher une action
On définit son texte avec le paramètre text
1 window = Tk()
2 text = Label(window , text=’Bonjour Clémence!’)
3 text.pack ()
4
5 btn = Button(window , text=’Appeler ’)
6 btn.pack ()
7
8 window.mainloop ()
9
Frame
Une frame est une zone rectangulaire
Permet d’accueillir d’autres composants
1 window = Tk()
2
3 f = Frame(window , background=’red ’)
4 f.pack ()
5 text = Label(f, text=’Marchand joue avec son Arduino !’)
6 text.pack ()
7 ok = Button(f, text=’OK’)
8 ok.pack ()
9
10 window.mainloop ()
10
Notation compacte
Pas nécessaire de stocker une référence par widget
Sauf si on doit y faire référence ailleurs ou appeler des méthodes
Appel direct à pack après création du widget
1 window = Tk()
2
3 f = Frame(window , background=’red ’).pack ()
4
5 Label(f, text=’Marchand joue avec son Arduino !’).pack ()
6 Button(f, text=’OK’).pack ()
7
8 window.mainloop ()
11
Construction d’interface
Spécification du composant parent
Pour chaque nouveau composant créé
1 window = Tk()
2 Label(window , text=’Clémence aime les burgers.’).pack ()
3 f = Frame(window)
4
5 Button(f, text=’Oui’).pack(side=LEFT)
6 Button(f, text=’Non’).pack(side=LEFT)
7
8 f.pack ()
9 window.mainloop ()
12
Gestionnaire de mise en page
Trois manières de gérer la mise en page
pack permet du positionnement relatif
place permet de spécifier les coordonnées précises
grid permet de placer les composants en grille
1 window = Tk()
2 text = ’B’
3 for r in range (3):
4 for c in range (11):
5 Label(window , text=text).grid(row=r, column=c)
6 text = ’W’ if text == ’B’ else ’B’
7 window.mainloop ()
13
Placement précis
Positionnement avec des coordonnées précises
Attention, les composants peuvent se chevaucher
1 window = Tk()
2 window.geometry(’400 x200 ’)
3
4 Label(text=’Hello :-)’).place(x=70, y=40)
5 Button(text=’Click me!’).place(x=100 , y=50)
6
7 window.mainloop ()
14
Zone de texte
Un zone de texte permet à l’utilisateur de saisir un texte
On définit son contenu avec le paramètre text
1 window = Tk()
2 text = Label(window , text=’Dis moi ton nom , je te dis ton âge :’)
3 text.pack ()
4
5 Entry(window).pack ()
6
7 window.mainloop ()
15
Application graphique (1)
Encapsulation de l’interface graphique dans une classe
Création d’une classe représentant la Frame principale
1 class App(Frame):
2 def __init__(self , parent):
3 Frame.__init__(self , parent)
4 self.pack ()
5 self. createWidgets ()
6
7 def createWidgets (self):
8 text = Label(self , text=’Dis moi ton nom , je te dis ton âge
:’)
9 text.pack ()
10 Entry(self).pack ()
11
12 window = Tk()
13 app = App(window)
14 app.mainloop ()
16
Programmation évènementielle
Boucle d’évènement
Des évènements sont produits par l’utilisateur
Il faut associer les évènements à un gestionnaire
Initialisation
Réception
évènements
Terminaison
Fonctionnalités
du programme
mainloop()
18
Gestionnaire d’évènement
Associer une fonction à une action d’un composant
Via le paramètre command lors de la création
1 window = Tk()
2 Label(window , text="Please , forgive me! It’s not my fault!").pack ()
3 Button(window , text=’KILL!’, command=window.destroy).pack ()
4
5 window.mainloop ()
19
Application graphique (2)
Construire toute l’application graphique dans une même classe
Initialisation de la Frame
Création et placement des widgets
Association des gestionnaires d’évènements
1 window = Tk()
2 app = App(window)
3 window.title(’Guess my age ’)
4 app.mainloop ()
20
Initialisation de la Frame
Création de la Frame et initialisation
En appelant la méthode __init__ de Frame
Mise en page, puis ajout des widgets
En appelant pack puis createWidgets
1 class App(Frame):
2 def __init__(self , parent):
3 Frame.__init__(self , parent)
4 self.pack ()
5 self. createWidgets ()
6
7 def createWidgets (self):
8 # ...
9
10 # ...
21
Création du gestionnaire d’évènements
Ajout d’une méthode par gestionnaire d’évènements
La méthode a accès aux composants de la Frame
Le gestionnaire peut mettre à jour l’interface
Appels de méthodes des widgets
1 def computeage(self):
2 age = 2015 - int(self.__year.get())
3 self.__answer[’text ’] = ’Vous avez {} ans ’.format(age)
22
Création des composants
Création des composants et ajout dans la Frame
La référence self contient la Frame
1 def createWidgets (self):
2 # Création d’un panneau de contrôle
3 controls = Frame(self)
4 # Création du label
5 Label(controls , text=’Année de naissance ?’).pack(side=LEFT)
6 # Création de la zone de texte
7 self.__year = Entry(controls)
8 self.__year.pack(side=LEFT)
9 # Création du bouton
10 Button(controls , text=’Valider ’, command=self.computeage).pack
()
11 controls.pack ()
12 # Zone de réponse
13 self.__answer = Label(self , text=’...’)
14 self.__answer.pack ()
23
Canvas
Un canvas est un widget pour faire du dessin 2D
Des méthodes permettent de dessiner des objets graphiques
1 window = Tk()
2 c = Canvas(window , width =200 ,
height =200)
3 c.pack ()
4
5 c. create_line (0, 0, 200, 200,
fill=’red ’)
6
7 c. create_rectangle (50, 50,
100, 100, fill=’blue ’)
8
9 window.mainloop ()
24
Animation (1)
Création d’une animation par une succession d’images
Mettre à jour de manière régulière le canvas
1 class App(Frame):
2 def __init__(self , parent):
3 Frame.__init__(self , parent)
4 self.pack ()
5 self. createWidgets ()
6
7 def createWidgets (self):
8 self.__c = Canvas(self , width =200 , height =200)
9 self.__c.pack ()
10 self.__c.create_line (0, 0, 200, 200, fill=’red ’)
11 self.__rect = self.__c. create_rectangle (0, 0, 50, 50, fill=
’blue ’)
12 Button(text=’Move ’, command=self.move).pack ()
13
14 def move(self):
15 self.__c.move(self.__rect , 10, 10)
25
Animation (2)
26
Crédits
https://www.flickr.com/photos/silvertje/1934375123
https://www.flickr.com/photos/125720812@N02/15529452622
27

Contenu connexe

Tendances

La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
ABDESSELAM ARROU
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
ECAM Brussels Engineering School
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
Yassine Badri
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
Haytam EL YOUSSFI
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
WajihBaghdadi1
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
Aziz Darouichi
 
Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
Mariem ZAOUALI
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
Cours python
Cours pythonCours python
Cours pythonsalmazen
 
Présentation python
Présentation pythonPrésentation python
Présentation python
Sarah
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
Mouna Torjmen
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
Houda TOUKABRI
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
Amri Ossama
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
Aziz Darouichi
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
Sana Aroussi
 

Tendances (20)

La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
 
Chap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en pythonChap5 La manipulation des iterables en python
Chap5 La manipulation des iterables en python
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Cours python
Cours pythonCours python
Cours python
 
Présentation python
Présentation pythonPrésentation python
Présentation python
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 

En vedette

Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
ECAM Brussels Engineering School
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
ECAM Brussels Engineering School
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
ECAM Brussels Engineering School
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neuronesMed Zaibi
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
ECAM Brussels Engineering School
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
ECAM Brussels Engineering School
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
ECAM Brussels Engineering School
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
ECAM Brussels Engineering School
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
ECAM Brussels Engineering School
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
ECAM Brussels Engineering School
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
ECAM Brussels Engineering School
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
ECAM Brussels Engineering School
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
ECAM Brussels Engineering School
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
ECAM Brussels Engineering School
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
ECAM Brussels Engineering School
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
ECAM Brussels Engineering School
 

En vedette (20)

Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
 
Composition, agrégation et immuabilité
Composition, agrégation et immuabilitéComposition, agrégation et immuabilité
Composition, agrégation et immuabilité
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neurones
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
UKO-JAVA1001-slides
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarquésProgrammation de systèmes embarqués : Introduction aux systèmes embarqués
Programmation de systèmes embarqués : Introduction aux systèmes embarqués
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 

Similaire à Python avancé : Interface graphique et programmation évènementielle

Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
ECAM Brussels Engineering School
 
Calculatrice scientifique en JAVA(AWT)
Calculatrice scientifique en JAVA(AWT)Calculatrice scientifique en JAVA(AWT)
Calculatrice scientifique en JAVA(AWT)
MOHAMMED MOURADI
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
imanebirjmel
 
5.ateliers avancés
5.ateliers avancés5.ateliers avancés
5.ateliers avancés
Chaikhani Ibtissam
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Farouk Mezghich
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
ECAM Brussels Engineering School
 
Le Guide de Développement pour Android
Le Guide de Développement pour AndroidLe Guide de Développement pour Android
Le Guide de Développement pour Android
Simon Debaecke
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
info1994
 
WPF.pptx
WPF.pptxWPF.pptx
WPF.pptx
AmeniRajhi1
 
Chapitre 9 Conception d’interface graphique.pdf
Chapitre 9 Conception d’interface graphique.pdfChapitre 9 Conception d’interface graphique.pdf
Chapitre 9 Conception d’interface graphique.pdf
AdamIMLOUL
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
Stéphane Legrand
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
ssuser65180a
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0adrienhautot
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
Microsoft
 
Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
Laurent BUNIET
 
Code Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonCode Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec python
bbourgois
 
Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.
Mathias Seguy
 
Les Activités.pdf
Les Activités.pdfLes Activités.pdf
Les Activités.pdf
RihabBENLAMINE
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
Eddy RICHARD
 
4-2-java swing.ppt
4-2-java swing.ppt4-2-java swing.ppt
4-2-java swing.ppt
Hadjer Kaddour
 

Similaire à Python avancé : Interface graphique et programmation évènementielle (20)

Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
 
Calculatrice scientifique en JAVA(AWT)
Calculatrice scientifique en JAVA(AWT)Calculatrice scientifique en JAVA(AWT)
Calculatrice scientifique en JAVA(AWT)
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
5.ateliers avancés
5.ateliers avancés5.ateliers avancés
5.ateliers avancés
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Le Guide de Développement pour Android
Le Guide de Développement pour AndroidLe Guide de Développement pour Android
Le Guide de Développement pour Android
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
 
WPF.pptx
WPF.pptxWPF.pptx
WPF.pptx
 
Chapitre 9 Conception d’interface graphique.pdf
Chapitre 9 Conception d’interface graphique.pdfChapitre 9 Conception d’interface graphique.pdf
Chapitre 9 Conception d’interface graphique.pdf
 
L’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacketL’environnement de programmation fonctionnelle DrRacket
L’environnement de programmation fonctionnelle DrRacket
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5Cours de C++, en français, 2002 - Cours 3.5
Cours de C++, en français, 2002 - Cours 3.5
 
Code Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec pythonCode Week 2014 - atelier d'initiation à la programmation avec python
Code Week 2014 - atelier d'initiation à la programmation avec python
 
Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.
 
Les Activités.pdf
Les Activités.pdfLes Activités.pdf
Les Activités.pdf
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
 
4-2-java swing.ppt
4-2-java swing.ppt4-2-java swing.ppt
4-2-java swing.ppt
 

Plus de ECAM Brussels Engineering School

Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
ECAM Brussels Engineering School
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
ECAM Brussels Engineering School
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
ECAM Brussels Engineering School
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
ECAM Brussels Engineering School
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
ECAM Brussels Engineering School
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
ECAM Brussels Engineering School
 

Plus de ECAM Brussels Engineering School (9)

Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...Programmation de systèmes embarqués : Internet of Things : système connecté e...
Programmation de systèmes embarqués : Internet of Things : système connecté e...
 
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSSProgrammation de systèmes embarqués : Systèmes temps réel et PRUSS
Programmation de systèmes embarqués : Systèmes temps réel et PRUSS
 
Programmation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communicationProgrammation de systèmes embarqués : Bus et périphériques de communication
Programmation de systèmes embarqués : Bus et périphériques de communication
 
Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 

Python avancé : Interface graphique et programmation évènementielle

  • 1. IN20 Informatique Séance 4 Interface graphique et programmation évènementielle Sébastien Combéfis, Quentin Lurkin lundi 5 octobre 2015
  • 2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
  • 3. Rappels Classe Définition d’une classe (variable d’instance et constructeur) Définition d’un constructeur et instanciation d’un objet Définition de méthode et appel Programmation orientée objet Représentation d’un objet avec __str__ Surcharge d’opérateur Égalité des objets (==) et des identités (is) Accesseur et mutateur 3
  • 4. Objectifs Interface graphique Construction d’une interface graphique Widgets graphiques Programmation évènementielle Boucle d’évènement Action et gestionnaire d’évènement Canvas et animation 4
  • 6. Graphical User Interface Utilisation de la librairie graphique Tk pour les GUI Importation de tkinter Création d’une nouvelle fenêtre avec un objet Tk Titre changé via la méthode title 1 from tkinter import * 2 3 window = Tk() 4 window.title(’LoL’) 5 window.mainloop () 6
  • 7. Widget Interface graphique construite à partir de widgets Composants tels que label, bouton, fenêtre, liste, case à cocher... Widgets placés les uns dans les autres Chaque composant a un composant parent 7
  • 8. Label Un label est une zone de texte non modifiable On définit son texte avec le paramètre text 1 window = Tk() 2 3 text = Label(window , text=’Bonjour Clémence!’) 4 text.pack () 5 6 window.mainloop () 8
  • 9. Bouton Un bouton peut être cliqué pour déclencher une action On définit son texte avec le paramètre text 1 window = Tk() 2 text = Label(window , text=’Bonjour Clémence!’) 3 text.pack () 4 5 btn = Button(window , text=’Appeler ’) 6 btn.pack () 7 8 window.mainloop () 9
  • 10. Frame Une frame est une zone rectangulaire Permet d’accueillir d’autres composants 1 window = Tk() 2 3 f = Frame(window , background=’red ’) 4 f.pack () 5 text = Label(f, text=’Marchand joue avec son Arduino !’) 6 text.pack () 7 ok = Button(f, text=’OK’) 8 ok.pack () 9 10 window.mainloop () 10
  • 11. Notation compacte Pas nécessaire de stocker une référence par widget Sauf si on doit y faire référence ailleurs ou appeler des méthodes Appel direct à pack après création du widget 1 window = Tk() 2 3 f = Frame(window , background=’red ’).pack () 4 5 Label(f, text=’Marchand joue avec son Arduino !’).pack () 6 Button(f, text=’OK’).pack () 7 8 window.mainloop () 11
  • 12. Construction d’interface Spécification du composant parent Pour chaque nouveau composant créé 1 window = Tk() 2 Label(window , text=’Clémence aime les burgers.’).pack () 3 f = Frame(window) 4 5 Button(f, text=’Oui’).pack(side=LEFT) 6 Button(f, text=’Non’).pack(side=LEFT) 7 8 f.pack () 9 window.mainloop () 12
  • 13. Gestionnaire de mise en page Trois manières de gérer la mise en page pack permet du positionnement relatif place permet de spécifier les coordonnées précises grid permet de placer les composants en grille 1 window = Tk() 2 text = ’B’ 3 for r in range (3): 4 for c in range (11): 5 Label(window , text=text).grid(row=r, column=c) 6 text = ’W’ if text == ’B’ else ’B’ 7 window.mainloop () 13
  • 14. Placement précis Positionnement avec des coordonnées précises Attention, les composants peuvent se chevaucher 1 window = Tk() 2 window.geometry(’400 x200 ’) 3 4 Label(text=’Hello :-)’).place(x=70, y=40) 5 Button(text=’Click me!’).place(x=100 , y=50) 6 7 window.mainloop () 14
  • 15. Zone de texte Un zone de texte permet à l’utilisateur de saisir un texte On définit son contenu avec le paramètre text 1 window = Tk() 2 text = Label(window , text=’Dis moi ton nom , je te dis ton âge :’) 3 text.pack () 4 5 Entry(window).pack () 6 7 window.mainloop () 15
  • 16. Application graphique (1) Encapsulation de l’interface graphique dans une classe Création d’une classe représentant la Frame principale 1 class App(Frame): 2 def __init__(self , parent): 3 Frame.__init__(self , parent) 4 self.pack () 5 self. createWidgets () 6 7 def createWidgets (self): 8 text = Label(self , text=’Dis moi ton nom , je te dis ton âge :’) 9 text.pack () 10 Entry(self).pack () 11 12 window = Tk() 13 app = App(window) 14 app.mainloop () 16
  • 18. Boucle d’évènement Des évènements sont produits par l’utilisateur Il faut associer les évènements à un gestionnaire Initialisation Réception évènements Terminaison Fonctionnalités du programme mainloop() 18
  • 19. Gestionnaire d’évènement Associer une fonction à une action d’un composant Via le paramètre command lors de la création 1 window = Tk() 2 Label(window , text="Please , forgive me! It’s not my fault!").pack () 3 Button(window , text=’KILL!’, command=window.destroy).pack () 4 5 window.mainloop () 19
  • 20. Application graphique (2) Construire toute l’application graphique dans une même classe Initialisation de la Frame Création et placement des widgets Association des gestionnaires d’évènements 1 window = Tk() 2 app = App(window) 3 window.title(’Guess my age ’) 4 app.mainloop () 20
  • 21. Initialisation de la Frame Création de la Frame et initialisation En appelant la méthode __init__ de Frame Mise en page, puis ajout des widgets En appelant pack puis createWidgets 1 class App(Frame): 2 def __init__(self , parent): 3 Frame.__init__(self , parent) 4 self.pack () 5 self. createWidgets () 6 7 def createWidgets (self): 8 # ... 9 10 # ... 21
  • 22. Création du gestionnaire d’évènements Ajout d’une méthode par gestionnaire d’évènements La méthode a accès aux composants de la Frame Le gestionnaire peut mettre à jour l’interface Appels de méthodes des widgets 1 def computeage(self): 2 age = 2015 - int(self.__year.get()) 3 self.__answer[’text ’] = ’Vous avez {} ans ’.format(age) 22
  • 23. Création des composants Création des composants et ajout dans la Frame La référence self contient la Frame 1 def createWidgets (self): 2 # Création d’un panneau de contrôle 3 controls = Frame(self) 4 # Création du label 5 Label(controls , text=’Année de naissance ?’).pack(side=LEFT) 6 # Création de la zone de texte 7 self.__year = Entry(controls) 8 self.__year.pack(side=LEFT) 9 # Création du bouton 10 Button(controls , text=’Valider ’, command=self.computeage).pack () 11 controls.pack () 12 # Zone de réponse 13 self.__answer = Label(self , text=’...’) 14 self.__answer.pack () 23
  • 24. Canvas Un canvas est un widget pour faire du dessin 2D Des méthodes permettent de dessiner des objets graphiques 1 window = Tk() 2 c = Canvas(window , width =200 , height =200) 3 c.pack () 4 5 c. create_line (0, 0, 200, 200, fill=’red ’) 6 7 c. create_rectangle (50, 50, 100, 100, fill=’blue ’) 8 9 window.mainloop () 24
  • 25. Animation (1) Création d’une animation par une succession d’images Mettre à jour de manière régulière le canvas 1 class App(Frame): 2 def __init__(self , parent): 3 Frame.__init__(self , parent) 4 self.pack () 5 self. createWidgets () 6 7 def createWidgets (self): 8 self.__c = Canvas(self , width =200 , height =200) 9 self.__c.pack () 10 self.__c.create_line (0, 0, 200, 200, fill=’red ’) 11 self.__rect = self.__c. create_rectangle (0, 0, 50, 50, fill= ’blue ’) 12 Button(text=’Move ’, command=self.move).pack () 13 14 def move(self): 15 self.__c.move(self.__rect , 10, 10) 25