LANGAGE PYTHON
Fenêtre et boutons:
Le package Tkinter comprend un ensemble de modules qui permettent de créer des fenêtres, des boutons, etc..
Vous pouvez ainsi créer des applications fenêtrées.
- Création d'une fenêtre

- tester le code ci-dessous:
#importation de tous les modules de Tkinter
from tkinter import *
#création de la fenêtre associée à la variable (objet) fen1
fen1 = Tk()
#titre de la fenêtre
fen1.title("ma super fenêtre")
#taille de la fenêtre en pixels
fen1.geometry("400x200")
#écriture dans le label lbl1 placé dans la fenêtre
lbl1 = Label(fen1, text="Bonjour tout le monde", fg='red')
lbl1.pack()
#ajout d'un bouton quitter appelé btn1
btn1 = Button(fen1, text="Quitter", command=fen1.destroy)
btn1.pack()
#abonnement de la fenêtre aux messages de Windows
fen1.mainloop()
Explications:
fen1= Tk() : la fonction constructeur "Tk()" créée un objet fenêtre appelé ici fen1
lbl1= Label(fen1, text='Bonjour tout le monde !', fg='red') : crée un objet zone de texte lbl1, avec la fonction constructeur Label (....), dans le constructeur Label (....) le premier argument est le nom de la fenêtre qui doit afficher la zone de texte (ici fen1 ). L'argument text détient le texte à afficher dans la zone, l'argument fg est la couleur de texte (fg: foreground en Anglais).
lbl1.pack() : applique la méthode "pack()" à l'objet lbl1, cette méthode place l'objet lbl1 sur la fenêtre et agit sur sa position, La méthode "geometry()" fixe une taille de 400 x 200 pixels à la fenêtre.
fen1.mainloop(): cette instruction est nécessaire pour que la fenêtre soit « à l'affût » des clics de souris, des pressions exercées sur les touches du clavier, etc. Elle initialise l'application.
Créer une méthode associée à un objet bouton
Dans l’exemple précédent, le bouton « Quitter » déclenche la commande " fen1.destroy", c'est-à-dire l’appel de la méthode "destroy()" de l’objet fen1. Vous n’avez pas écrit la méthode "destroy()", elle a été écrite par les concepteurs de Tkinter.
On peut écrire sa propre fonction et l’associer comme action à exécuter si on clique sur un bouton, voici la démarche:
- Création du code d'un bouton :
# ajout de l’objet bouton btn2 à la fenêtre fen1, le bouton appellera la fonction popup() quand on cliquera dessus
btn2 = Button(fen1, text="Clique", command=popup)
btn2.pack()
- Définition de la fonction (méthode) popup ():
La méthode (fonction) "popup() " demandera la création de la boite de message ci-dessous :

Les boites de message Windows sont des fenêtres particulières prêtes à l'emploi. Elle se trouve dans Tkinter, ici la boite de message voulue est générée par la fonction « showinfo()» du module messagebox du package tkinter. Voici la définition de notre méthode "popup()" qui demande la création d'une boite de message de type "showinfo()" configurée pour afficher le message montré ci-dessus:
def popup():
messagebox.showinfo("Information", "tu as cliqué !")
- Le code complet avec le nouveau bouton:
- tester le code ci-dessous:
#Importations des modules et fonctions de l'interface Tkinter
from tkinter import Tk, messagebox, Label, Button
# Définition de la fonction popup()
def popup():
messagebox.showinfo("Information", "tu as cliqué !")
#création de la fenêtre associée à la variable fen1
fen1 = Tk()
#titre de la fenêtre
fen1.title("ma super fenêtre")
#taille de la fenêtre en pixels
fen1.geometry("400x200")
#écriture dans le label lbl1 placé dans la fenêtre
lbl1 = Label(fen1, text="Bonjour tout le monde", fg='red')
lbl1.pack()
#ajout d'un bouton quitter appelé btn1
btn1 = Button(fen1, text="Quitter", command=fen1.destroy)
btn1.pack()
#ajout du bouton btn2 qui appelera la fonction popup() définie plus haut
btn2 = Button(fen1, text="Clique", command=popup)
btn2.pack()
#abonnement de la fenêtre aux messages de Windows
fen1.mainloop()
Le résultat:

Remarque:
En tant qu'argument de command dans "Button(....)" la méthode "popup()" est écrite sans ses parenthèses, on écrit command=popup et non command = popup():
btn2 = Button(fen1, text="Clique", command=popup)
Vous retrouver cette écriture pour toutes les fonctions placées comme argument de command , par exemple la méthode "destroy()" d'une fenêtre:
btn1 = Button(fen1, text="Quitter", command=fen1.destroy)
Positionnement des éléments sur une fenêtre
Tous les éléments d’une fenêtre (boutons, zone de texte, etc..) sont appelés des widgets en python. Les widgets peuvent être positionnés dans les fenêtres à l'aide de trois méthodes différentes : la méthode grid(), la méthode pack() et la méthode place().
La méthode pack() que vous avez déjà utilisée ne permet pas un positionnement très précis.
La méthode grid() permet d’associer une grille à la fenêtre dans laquelle sont positionnés les widgets. La grille est composée de lignes et de colonnes. Une ligne est appelée row et une colonne column
Voyons comment positionner les widgets pour obtenir le rendu suivant :

La fenêtre comprend :
- 3 champs de type Label qui affichent Nom, Prénom et âge,
- 3 zones de saisie de texte (Entry en python),
- un Canvas dans lequel on positionne l’image d’un blaireau.
Ci-dessous, vous voyez la grille avec ses colonnes ( Col ) et ses lignes ( Row ), un élément placé dans une cellule peut être positionné avec une marge, c'est le cas de l'image du blaireau. Les textes dans les labels peuvent être alignés à droite, à gauche, en haut ou en bas de la case où ils sont placés, dans l'exemple les textes sont alignés à droite:

Le widget label « txt1 » qui affiche « Nom » est en Row=1, et column=1 son texte est aligné à droite (sticky=E), il se programmera :
txt1 = Label(fen1, text ='Nom')
txt1.grid(row =1, column =1, sticky =E)
Sticky veut dire « collé », on peut coller à droite (E) à gauche (W), en haut (N) ou en bas (S), ce sont les points cardinaux qui ont été retenus pour spécifier le positionnement.
Le widget canvas « can1 » a une largeur de 220 pixels (width =220) et une hauteur de 220 pixels (height=220) et il a un fond blanc ( bg ='white') . Il est positionné en row=1 et column=3, mais il occupe 3 lignes soit une étendue (rowspan =3). Il doit y avoir une marge de 10 px autour du widget selon x (padx=10) et une marge de 5 pixels selon y (pady=5) ; ce qui se programmera :
can1 = Canvas(fen1, width = 220, height =220, bg ='white')
can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)
Le code complet:
- tester le code ci-dessous ( attention, télécharger (cliquez-ici) et placer le fichier 'Blaireau.gif' dans le même dossier que le fichier du code python, dans l'exemple ci-dessous, le fichier python s'appelle code.py et il est au même endroit que l'image)

Le contenu de code.py:
from tkinter import Tk, messagebox, Label, Button, Entry, Canvas, E, PhotoImage
fen1 = Tk()
# création de widgets 'Label' et 'Entry' :
txt1 = Label(fen1, text ='Nom')
txt2 = Label(fen1, text ='Prénom')
txt3 = Label(fen1, text ='age')
entr1 = Entry(fen1)
entr2 = Entry(fen1)
entr3 = Entry(fen1)
# création d'un widget 'Canvas' contenant une image bitmap :
can1 = Canvas(fen1, width = 220, height = 220, bg ='white')
photo = PhotoImage(file ='Blaireau.gif')
# image centrée dans le canvas x=100 et y=110
item = can1.create_image(110,110,image = photo)
# Positionnement des widgets à l'aide de la méthode 'grid' :
txt1.grid(row =1, column =1, sticky =E)
txt2.grid(row =2, column =1, sticky =E)
txt3.grid(row =3, column =1, sticky =E)
entr1.grid(row =1, column =2)
entr2.grid(row =2, column =2)
entr3.grid(row =3, column =2)
can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)
# démarrage de l'application:
fen1.mainloop()
Exercice 1
Ajouter un bouton en ligne4 et colonne2 de la fenêtre, associer ce bouton à la fonction lecture_champ().
Récupérer le contenu des trois Entry et les copier dans une liste.
Afficher la liste avec un print.
Exemple de récupération du contenu d'une Entry puis affichage des données récupérées dans une messagebox:

Créé avec HelpNDoc Personal Edition: Créer des fichiers d'aide pour la plateforme Qt Help