SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Shellmates
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neurones
Med Zaibi
 

Mais procurados (20)

Formation python
Formation pythonFormation python
Formation python
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
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
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
patron de conception
patron de conception patron de conception
patron de conception
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec Java
 
Présentation python
Présentation pythonPrésentation python
Présentation python
 
Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2Manuel des TP : Atelier Web 2
Manuel des TP : Atelier Web 2
 
UML+Python
UML+PythonUML+Python
UML+Python
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neurones
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 

Destaque

Destaque (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é
 
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
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 

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

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
 
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
adrienhautot
 

Semelhante a 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
 

Mais de ECAM Brussels Engineering School

Mais 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
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
 

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