nous abordons ici quelques bases de la boite a outils TKinter qui permet de créer des interfaces graphiques sous python.
cet article est une reprise et une traduction de certains tutos en langue anglaise trouvés ça et là sur le net (voir liste en fin d’article).
INSTALATION DE TKinter:
si TK inter n’est pas present par defaut sur votre version de l’OS linux, voici la commande pour installer la bibliotheque:
sudo apt-get install python-tk
STRUCTURE DE TKinter
TKinter utilise deux grands principes, la fenêtre (Window/frame) et le Widget ( gadget) qui s’affiche dans une Frame créant ainsi une relation parent/enfant entre le frame et le widget.
il y a 4 stades pour créer un Widget:
- Création du widget dans une frame
- Configuration des attributs du widget ( police de caractères, style, couleur ,etc..)
- encapsulation dans une zone de position de la frame pour le rendre visible
- liaison/association du widget a une fonction ou un évènement ( saisie de texte par exemple)
voyons tout de suite des exemples pour rentrer dans le vif du sujet:
Creation de BOUTONS:
import tkinter as tk
def write_slogan():
print("Tkinter est facile a utiliser!")
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
button = tk.Button(frame,text="QUIT",fg="red", command=quit)
button.pack(side=tk.LEFT)
slogan = tk.Button(frame,text="Hello",command=write_slogan)
slogan.pack(side=tk.LEFT)
root.mainloop()
l’exécution de ce bout de python dans thonny python ouvre la fenêtre ci dessous. si on clique sur Hello avec la souris , un message s’affiche, si on clique sur QUIT, on sort du programme et la fenetre se referme.
analysons la structure du module python créé:
import tkinter as tk
cette ligne importe la boite a outil TKinter et les commandes associées
def write_slogan():
print("Tkinter est facile a utiliser!")
ici on defini une fonction “write” qui va afficher la chaine de caractere “TKinter est facile a utiliser”
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
Ces 3 lignes initialisent la fenetre du programme(root), definis le frame dans root et encapsulation dans root=>pack()
button = tk.Button(frame,text="QUIT",fg="red", command=quit) button.pack(side=tk.LEFT)
c’est ici dans ces 2 lignes , que l’on crée le widget bouton appelé “button”), qu’on défini ses attributs ( text=QUIT + police de caractere rouge + command “quit” et qu’on l’encapsule a gauche dans la frame.
slogan=tk.Button(frame,text="Hello",command=write_slogan) slogan.pack(side=tk.LEFT)
ici on créé un deuxieme widget bouton appelé “slogan” , avec ses attributs ( text=Hello sans police de caractere particuliere et auquel on associe la commande d’appel de la fonction “write_slogan” definie en debut de programme. pour finir , on encapsule le bouton a droite dans la fenetre.
on termine le programme par une fonction de boucle “root.mainloop()”.
Les WIDGETS d’entrée :
import tkinter as tk
master = tk.Tk()
tk.Label(master, text="First Name").grid(row=0)
tk.Label(master, text="Last Name").grid(row=1)
e1 = tk.Entry(master)
e2 = tk.Entry(master)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
master.mainloop()
dans cet exemple, nous utilisons les widgets “Label” et “Entry” qui permettent respectivement de definir deux etiquettes de texte et deux zones de saisie de caracteres. ce coup ci , la particularité pour le positionnement de chacun des widget est d’utiliser le principe des lignes et colonnes pour designer l’emplacement de chaque widget . les chaines de caractères saisies seront affectées chacune a 2 variables e1 et e2 qui pourront etre utiliser par la suite ( pas de traitement dans cet exemple).
LES SLIDERS:
from Tkinter import
master = Tk()
w = Scale(master, from_=0, to=42)
w.pack()
w = Scale(master, from_=0, to=200, orient=HORIZONTAL)
w.pack()
mainloop()
le widget “Scale” permet de créer des slider de saisie de variables. si rien n’est defini dans l’attribut le slider est vertical , pour le positionner horizontalement , mettre l’attribut orient=HORIZONTAL.
LES MENUS:
from tkinter import
from tkinter.filedialog import askopenfilename
def NewFile():
print("New File!")
def OpenFile():
name = askopenfilename()
print(name)
def About():
print("This is a simple example of a menu")
root = Tk()
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New", command=NewFile)
filemenu.add_command(label="Open...", command=OpenFile)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
helpmenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="About...", command=About)
mainloop()
dernier widget que nous voyons dans ce post , la création de menus . le bout de programme affiché et disponible dans le fichier zip permet de créer et afficher le menu ci dessus .
QUELQUES LIENS POUR ALLER PLUS LOIN:
en francais:
https://python.doctor/page-tkinter-interface-graphique-python-tutoriel
http://www.xavierdupre.fr/app/teachpyx/helpsphinx/c_gui/tkinter.html
en anglais
https://www.python-course.eu/python_tkinter.php