Interface Graphique Avec Le Module Tkinter - Informatique Au Lycee
Maybe your like
Le module Tkinter (“Tk interface”) de Python permet de créer des interfaces graphiques (GUI : graphical user interface).
De nombreux composants graphiques (ou widgets) sont disponibles : fenêtre (classe Tk), bouton (classe Button), case à cocher (classe Checkbutton), étiquette (classe Label), zone de texte simple (classe Entry), menu (classe Menu), zone graphique (classe Canvas), cadre (classe Frame)…
On peut gérer de nombreux événements : clic sur la souris, déplacement de la souris, appui sur une touche du clavier, top d’horloge…
Logiciels utilisant Python et sa bibliothèque graphique Tkinter
Tkinter est l’interface graphique des logiciels IDLE (environnement de développement intégré pour le langage Python) et PyMOL (logiciel libre de visualisation de structures chimiques en 3D) :

Des scripts pour débuter
Les exemples qui suivent ont été écrits avec Python version 3.
Exemple n°0 : widgets Button et Label
Commençons par le traditionnel Hello world !

Ce code est détaillé ici.
Exemple n°1 : widgets Button et Label
Ce script simule un dé à 6 faces :

Ce code est détaillé ici.
Exemple n°2 : widgets Frame, Label et Button
Un widget Frame est une zone rectangulaire qui peut contenir d’autres widgets.

Exemple n°3 : widgets Entry, Label, Button et boîte de dialogue MessageBox
Un script d’authentification :

Exemple n°4 : widgets Spinbox et Label

Exemple n°5 : widgets Scale et Button

Exemple n°6 : widgets Canvas et Button
Le script cercle.py dessine, à chaque clic sur le bouton Go, un disque de rayon 20 pixels à une position aléatoire :

Ce code est détaillé ici.
Exemple n°7 : widgets Canvas et Button ; gestion des images
Ce script reprend le script cercle.py avec une image de fond (méthode create_image() de la classe Canvas) et la possibilité d’effacer la dernière action (pour cela, on se sert du numéro identifiant de chaque item d’un widget Canvas) :


Télécharger l’image de fond tk_cible.gif
Exemple n°8 : widgets Menu et Canvas ; gestion des images ; boîtes de dialogue FileDialog et MessageBox
Le script suivant est un browser d’images (formats .gif .ppm .pgm), avec un widget Menu :

une boîte de dialogue FileDialog pour rechercher un fichier :

et un widget Canvas dans lequel sera affiché l’image :

Exemple n°9 : gestion du temps
L’heure courante est mise à jour toutes les secondes :

Pour cela, on utilise la méthode after() qui appelle une fonction après une durée donnée en millisecondes :
# script heure.py #(C) Fabrice Sincère from tkinter import * import time def maj(): # on arrive ici toutes les 1000 ms heure.set(time.strftime('%H:%M:%S')) Mafenetre.after(1000,maj) Mafenetre = Tk() Mafenetre.title("Heure courante") # Création d'un widget Label heure = StringVar() Label(Mafenetre,textvariable=heure).pack(padx=10,pady=10) maj() Mafenetre.mainloop()Exemple n°10 : widgets Canvas et Button ; gestion du temps
Le script animation.py est un exemple d’animation (affichage d’environ 20 disques par seconde) :

On se sert de la méthode after() pour actualiser la zone graphique toutes les 50 ms :
# script animation.py #(C) Fabrice Sincère from tkinter import * import random def Cercle(): """ Dessine un cercle de centre (x,y) et de rayon r """ global Arret x = random.randint(0,Largeur) y = random.randint(0,Hauteur) r = 10 Canevas.create_oval(x-r, y-r, x+r, y+r, outline='red', fill='red') if Arret == False: # appel de la fonction Cercle() après une pause de 50 millisecondes Mafenetre.after(50,Cercle) def Arreter(): """ Arrêt de l'animation """ global Arret Arret = True def Demarrer(): """ Démarre l'animation """ global Arret Canevas.delete(ALL) if Arret == True: Arret = False Cercle() # un seul appel à cette fonction Arret = True # Création de la fenêtre principale (main window) Mafenetre = Tk() Mafenetre.title('Animation') # Création d'un widget Canvas Largeur = 480 Hauteur = 320 Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white') Canevas.pack(padx =5, pady =5) # Création d'un widget Button (bouton Démarrer) BoutonGo = Button(Mafenetre, text ='Démarrer', command = Demarrer) BoutonGo.pack(side = LEFT, padx = 10, pady = 10) # Création d'un widget Button (bouton Arrêter) BoutonArreter = Button(Mafenetre, text ='Arrêter', command = Arreter) BoutonArreter.pack(side = LEFT, padx = 5, pady = 5) # Création d'un widget Button (bouton Quitter) BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy) BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5) Mafenetre.mainloop()Exemple n°11 : widget Canvas ; gestion du temps
Le script animation_balle.py est une animation qui gère le déplacement d’une balle et de ses rebonds sur les bords :

Exemple n°12 : widgets Canvas et Button ; gestion de la souris
Le script carre.py dessine un carré à l’endroit du clic de la souris. Pour cela, on utilise l’événement associé au clic gauche de la souris.

Ce code est détaillé ici.
Exemple n°13 : widget Canvas ; gestion de la souris
Nous allons voir comment déplacer un objet graphique avec la souris (clic, drag and drop) :

Exemple n°14 : widgets Canvas et Button ; gestion du clavier
Le script pion.py gère le déplacement d’un pion avec le clavier. Pour se faire, on utilise l’événement associé à l’appui d’une touche du clavier.
* touche a déplacement vers le haut * touche q déplacement vers le bas * touche l déplacement vers la gauche * touche m déplacement vers la droite
Ce code est détaillé ici.
Symboles des quelques touches spéciales
‘Up’, ‘Down’, ‘Left’, ‘Right’ (flèches directionnelles haut, bas, gauche, droite), ‘Return’ (touche Entrée), ‘space’ (barre Espace)…
Exemple n°15 : widgets Checkbutton et Button ; musiques et sons avec pygame

Le module pygame est un module externe de création de jeux vidéo en 2D. pygame contient un sous module pygame.mixer qui permet de charger et de lire des musiques ou des sons dans plusieurs formats (mp3, ogg, wav…). La procédure d’installation de pygame se trouve ici.
# script sons_pygame.py #(C) Fabrice Sincère # python version 3.2 # pygame version 1.9.2 from tkinter import * import pygame pygame.mixer.init() pygame.mixer.music.load("chavmusic7.mp3") # réglage volume pygame.mixer.music.set_volume(0.3) son1 = pygame.mixer.Sound("balla1.ogg") son1.set_volume(0.5) son2 = pygame.mixer.Sound("death1.wav") son2.set_volume(1.0) def PlaySon1(): son1.play() def PlaySon2(): son2.play() def Music(): print(musique.get()) if musique.get() == 1: # 1 (ON) # joue en boucle pygame.mixer.music.play(-1) else: # 0 (OFF) pygame.mixer.music.stop() # Création de la fenêtre principale (main window) Mafenetre = Tk() Mafenetre.title("Checkbutton widget + Pygame.mixer") # Création d'un widget Button Button(Mafenetre,text="son 1",command=PlaySon1).pack(side=LEFT,padx=10,pady=10) # Création d'un widget Button Button(Mafenetre,text="son 2",command=PlaySon2).pack(side=LEFT,padx=10,pady=10) # Création d'un widget Checkbutton musique = IntVar() musique.set(1) # ON Checkbutton(Mafenetre,text="Musique de fond",variable=musique,command=Music).pack(side=LEFT,padx=10,pady=10) Music() Mafenetre.mainloop()Télécharger le son death1.wav Télécharger le son balla1.ogg Télécharger la musique chavmusic7.mp3
Exercices
Exercice 7.1 ★ En s’inspirant des scripts de.py et mot_de_passe.py, écrire une application avec interface graphique qui calcule la racine carrée d’un nombre.
Par exemple, le calcul de √3 donne :

Exercice 7.2 ★ Reprendre le script mot_de_passe.py de manière à limiter le nombre d’essais à trois.

Exercice 7.3 ★ En s’inspirant des scripts de.py et mot_de_passe.py, écrire une application avec interface graphique qui calcule l’addition ou la soustraction de deux nombres :

Exercice 7.4 ★ A partir du script cercle.py, dessiner des disques de positions, rayons et couleurs aléatoires :

Exercice 7.5 ★ A partir du script animation.py, faire une animation avec des disques de positions, rayons et couleurs aléatoires.

Exercice 7.6 ★★ A partir du script animation_balle.py, faire une animation qui gère la trajectoire d’un nombre quelconque de balles :

Remarque : on ne tiendra pas compte des chocs entre balles.
Exercice 7.7 ★★
1) Reprendre le script cible.py et remplacer le disque noir par une image :

Télécharger l’image impact.gif Remarque : l’image de l’impact doit avoir un fond transparent.
2) En s’inspirant du script sons_pygame.py, ajouter un effet sonore (tk_coup_fusil.wav).
Exercice 7.8 ★★ En s’inspirant du script animation.py, faire l’animation d’un mouvement aléatoire brownien.
On utilisera la méthode create_line() de la classe Canvas.

Exercice 7.9 ★ Compléter le script pion.py de manière à dessiner une grille.
On utilisera la méthode create_line() de la classe Canvas.

Exercice 7.10 ★★
Ecrire un script qui tire une carte et l’affiche à une position aléatoire.

Il faut se servir d’une référence comme dans le script lecture_gif.py
Télécharger les images des 52 cartes et un squelette du script ici.
Quelques idées de projets
Projet n°1 ★★★ Jeu Tic-Tac-Toe (jeu du morpion)
Un projet relativement simple pour un travail en binôme.
Le fichier exécutable est téléchargeable ici.

Remarque : dans ma version, le code source Python fait une bonne centaine de lignes.
On pourra compléter ce projet par une version en réseau (plus d’informations ici).
Projet n°2 ★★★★★ Jeu de Tetris avec classement en ligne
Un gros projet à décomposer en plusieurs tâches :
* jeu en local avec Python * [applications Web](http://fsincere.free.fr/isn/langages_web/isn_langages_web.php) (en PHP ou CGI-Python, base de données MySQL) * [nombre d'inscrits](http://fsincere.free.fr/tetris/nombre_inscription.php) * [inscription en ligne](http://fsincere.free.fr/tetris/formulaire.html) (essayez !) * [classement en ligne](http://fsincere.free.fr/tetris/score.php) * [record](http://fsincere.free.fr/tetris/record.php) * [dernières parties](http://fsincere.free.fr/tetris/dernieres_parties.php) * [dernière version](http://fsincere.free.fr/tetris/derniere_version.php)
Le fichier exécutable est téléchargeable ici.
Projet n°3 ★★★★ Jeu de SnakeDuel
Un jeu qui se joue à deux, ou seul contre l’ordinateur.
Le fichier exécutable est téléchargeable ici.

Projet n°4 ★★★★ Jeu de Pong
Un jeu qui se joue à deux.
Le fichier exécutable est téléchargeable ici.

Projet n°5 ★★★★ Puzzle
Le fichier exécutable est téléchargeable ici.

Projet n°6 ★★★ Simulation de feux de forêt

Liens utiles :
* [cormas.cirad.fr](http://cormas.cirad.fr/fr/applica/fireautomata.htm) * [deptinfo-ensip.univ-poitiers.fr](https://deptinfo-ensip.univ-poitiers.fr/FILES/TPS/AUTOMATES_CELLULAIRES/feuforet.php)Projet n°7 ★★★ Distance entre deux villes

Vous aurez besoin des modules urllib et json ainsi que de l’API Google Maps.
Programmes exécutables pour Windows
Pas besoin d’avoir Python sur votre machine !
Les programmes exécutables (extension .exe) des exercices et de la plupart des projets sont téléchargeables ici (7 Mo). Décompresser ensuite l’archive.
Pour jouer à Tetris (par exemple), lancer le programme tk_Tetris.exe Plus d’informations sur les jeux ici. Have fun !
Remarques
* Testé avec succès sous Windows XP, Windows 7 et ... Linux/Ubuntu (avec l'émulateur Wine).Webographie
* [Création d'interface graphique avec le module tkinter (niveau classe de seconde)](http://fabrice.sincere.free.fr/ressources/SECONDE/) * [leducdenormandie.itslearning.com](https://leducdenormandie.itslearning.com/9689/ISN/ISN) * [fr.wikibooks.org (tkinter)](http://fr.wikibooks.org/wiki/Programmation_Python/Tkinter) * [fr.wikibooks.org (fenêtres et graphismes)](https://fr.wikibooks.org/wiki/Apprendre_%C3%A0_programmer_avec_Python/Utilisation_de_fen%C3%AAtres_et_de_graphismes) * [python.developpez.com](http://python.developpez.com/faq/?page=Tkinter) * [docs.python.org](http://docs.python.org/3/library/tkinter.html) * [infohost.nmt.edu](http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html) * [effbot.org](http://effbot.org/tkinterbook/) * [epydoc.sourceforge.net](http://epydoc.sourceforge.net/stdlib/Tkinter-module.html) * [www.tutorialspoint.com](http://www.tutorialspoint.com/python/python_gui_programming.htm) * [lmgtfy.com](http://lmgtfy.com/?q=python+tkinter) * [Module pygame.mixer.Sound (documentation)](http://www.pygame.org/docs/ref/mixer.html#pygame.mixer.Sound) * [Module pygame.mixer.music (documentation)](http://www.pygame.org/docs/ref/music.html)Sources : Ce cours provient du site de Fabrice Sincère
Tag » Apprendre Tkinter
-
Interface Graphique Tkinter Python
-
APPRENDRE LE PYTHON #9 ? INTERFACE GRAPHIQUE (avec ...
-
Créer Une IHM En Python3
-
Tkinter - Apprendre Python Avec Une Interface Graphique
-
20. Fenêtres Graphiques Et Tkinter - Cours De Python
-
Créer Des Interfaces Graphiques Avec Tkinter - Framework Python
-
Créer Des Interfaces Graphiques Avec Tkinter - Pythonforge
-
Les Bases Pour Créer Une Interface Graphique Avec Python - D-krypton
-
Tkinter — Programmation Avec Le Langage Python - Xavier Dupré
-
Tutoriel Python Tkinter - Acervo Lima
-
Le Langage Python 3 Et L'Interface Graphique Tkinter - EMI
-
Python - Apprendre Et Créer Des Programmes Intéressants | Udemy
-
Apprendre La Programmation - Pixees
-
La Programmation GUI Python Avec Tkinter - Le Blog Du Codeur