Interface Graphique Tkinter Python
Interface Graphique Tkinter Python
Interface Graphique Tkinter Python
(./page-cours-python-debutant-documentation)
Interface graphique Tkinter python
(./page-cours-python-avance-documentation-
Accueil (./) › Python avancé (./page-cours-python-avance-documentation-francaise) › Interface
francaise)
graphique Tkinter python (./page-tkinter-interface-graphique-python-tutoriel)
(./page-django-cours-tutoriels-documentation-
Gestion fichiers et dossiers (./page-gestion-fichiers-dossiers-python)
Graphiques scientifiques francaise)
(./page-creer-graphiques-scientifiques-python-apprendre)
(./page-raspberry-pi-apprendre-debutant-acheter-
Tkinter est un module de base intégré dans Python , normalement vous n'avez rien à faire pour
python)
pouvoir l'utiliser. L'un des avantages de Tkinter est sa portabilité sur les OS les plus utilisés par le
grand public.
Installer Tkinter
Tkinter est installé par défaut, si ce n'est pas le cas, lancez la commande suivante:
En python 3:
Python 2, python 3
Les modules ne sont pas les mêmes suivant votre version de python. Si le message suivant apparaît
lors de l'exécution de votre script:
C'est que le module appelé n'est pas le bon par rapport à votre version python.
Python 2 Python 3
Tkinter → tkinter
Tix → tkinter.tix
ttk → tkinter.ttk
tkMessageBox → tkinter.messagebox
tkColorChooser → tkinter.colorchooser
tkFileDialog → tkinter.filedialog
tkCommonDialog → tkinter.commondialog
tkSimpleDialog → tkinter.simpledialog
tkFont → tkinter.font
Tkdnd → tkinter.dnd
ScrolledText → tkinter.scrolledtext
Hello world
Voici le code de votre premier hello world
# coding: utf-8
fenetre = Tk()
fenetre.mainloop()
Les boutons
Les boutons permettent de proposer une action à l'utilisateur. Dans l'exemple ci-dessous, on lui
propose de fermer la fenêtre.
# bouton de sortie
bouton=Button(fenetre, text="Fermer", command=fenetre.quit)
bouton.pack()
Les labels
Les labels sont des espaces prévus pour écrire du texte. Les labels servent souvent à décrire un widget
comme un input
# label
label = Label(fenetre, text="Texte par défaut", bg="yellow")
label.pack()
Entrée / input
# entrée
value = StringVar()
value.set("texte par défaut")
entree = Entry(fenetre, textvariable=string, width=30)
entree.pack()
Case à cocher
Les checkbox proposent à l'utilisateur de cocher une option.
# checkbutton
bouton = Checkbutton(fenetre, text="Nouveau?")
bouton.pack()
Boutons radio
Les boutons radio sont des cases à cocher qui sont dans un groupe et dans ce groupe seul un élément
peut être sélectionné.
# radiobutton
value = StringVar()
bouton1 = Radiobutton(fenetre, text="Oui", variable=value, value=1)
bouton2 = Radiobutton(fenetre, text="Non", variable=value, value=2)
bouton3 = Radiobutton(fenetre, text="Peu être", variable=value, value=3)
bouton1.pack()
bouton2.pack()
bouton3.pack()
Les listes
Les listes permettent de récupérer une valeur sélectionnée par l'utilisateur.
# liste
liste = Listbox(fenetre)
liste.insert(1, "Python")
liste.insert(2, "PHP")
liste.insert(3, "jQuery")
liste.insert(4, "CSS")
liste.insert(5, "Javascript")
liste.pack()
Canvas
Un canvas (toile, tableau en français) est un espace dans lequel vous pouvez dessiner ou écrire ce que
vous voulez:
# canvas
canvas = Canvas(fenetre, width=150, height=120, background='yellow')
ligne1 = canvas.create_line(75, 0, 75, 120)
ligne2 = canvas.create_line(0, 60, 150, 60)
txt = canvas.create_text(75, 60, text="Cible", font="Arial 16 italic", fill="blue")
canvas.pack()
Si vous voulez changer les coordonnées d'un élement crée dans le canevas, vous pouvez utiliser la
méthode coords .
canvas.delete(élément)
print dir(Canvas())
ou visitez la page suivante infohost (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/canvas-
methods.html)
Scale
Le widget scale permet de récupérer une valeur numérique via un scroll
value = DoubleVar()
scale = Scale(fenetre, variable=value)
scale.pack()
Frames
Les frames (cadres) sont des conteneurs qui permettent de séparer des éléments.
fenetre['bg']='white'
# frame 1
Frame1 = Frame(fenetre, borderwidth=2, relief=GROOVE)
Frame1.pack(side=LEFT, padx=30, pady=30)
# frame 2
Frame2 = Frame(fenetre, borderwidth=2, relief=GROOVE)
Frame2.pack(side=LEFT, padx=10, pady=10)
# Ajout de labels
Label(Frame1, text="Frame 1").pack(padx=10, pady=10)
Label(Frame2, text="Frame 2").pack(padx=10, pady=10)
Label(Frame3, text="Frame 3",bg="white").pack(padx=10, pady=10)
PanedWindow
Le panedwindow est un conteneur qui peut contenir autant de panneaux que nécessaire disposé
horizontalement ou verticalement.
p = PanedWindow(fenetre, orient=HORIZONTAL)
p.pack(side=TOP, expand=Y, fill=BOTH, pady=2, padx=2)
p.add(Label(p, text='Volet 1', background='blue', anchor=CENTER))
p.add(Label(p, text='Volet 2', background='white', anchor=CENTER) )
p.add(Label(p, text='Volet 3', background='red', anchor=CENTER) )
p.pack()
Spinbox
La spinbox propose à l'utilisateur de choisir un nombre
LabelFrame
Le labelframe est un cadre avec un label.
Les alertes
Pour pouvoir utiliser les alertes de votre os, vous pouvez importer le module tkMessageBox (Python
2).
Pour python 3:
from tkinter.messagebox import *
Exemple d'utilisation:
def callback():
if askyesno('Titre 1', 'Êtes-vous sûr de vouloir faire ça?'):
showwarning('Titre 2', 'Tant pis...')
else:
showinfo('Titre 3', 'Vous avez peur!')
showerror("Titre 4", "Aha")
Button(text='Action', command=callback).pack()
showinfo()
showwarning()
showerror()
askquestion()
askokcancel()
askyesno()
askretrycancel()
Barre de menu
Il est possible de créer une barre de menu comme-ceci:
def alert():
showinfo("alerte", "Bravo!")
menubar = Menu(fenetre)
fenetre.config(menu=menubar)
print dir(Button())
side=TOP : haut
side=LEFT : gauche
side=BOTTOM : bas
side=RIGHT : droite
Exemple:
Autre exemple:
i : pouces
m : millimètre
c : centimètre
Le curseur
Vous pouvez changer l'apparance de votre curseur:
Le relief
Vous pouvez changer le relief sur vos éléments:
FLAT
RAISED
SUNKEN
GROOVE
RIDGE
photo = PhotoImage(file="ma_photo.png")
def recupere():
showinfo("Alerte", entree.get())
value = StringVar()
value.set("Valeur")
entree = Entry(fenetre, textvariable=value, width=30)
entree.pack()
La fonction askopenfilename retourne le chemin du fichier que vous avez choisi avec le nom de celui-
ci.
Exemple: /home/olivier/ma_photo.png
Récupérer un fichier texte et l'afficher
filename = askopenfilename(title="Ouvrir votre document",filetypes=[('txt files','.txt'),('all files
fichier = open(filename, "r")
content = fichier.read()
fichier.close()
Les évènements
Vous pouvez récupérer les actions utilisateurs à travers les events (évènement en français).
Pour chaque widget, vous pouvez binder (lier en français) un évènement, par exemple dire lorsque
l'utilisateur appuie sur telle touche, faire cela.
def clavier(event):
touche = event.keysym
print(touche)
Pour supprimer la liasion de l'évènement vous pouvez utiliser les méthodes unbind ou unbind_all .
Voici un exemple où l'on peut bouger un carré avec les touches directionnelles:
# fonction appellée lorsque l'utilisateur presse une touche
def clavier(event):
global coords
touche = event.keysym
if touche == "Up":
coords = (coords[0], coords[1] - 10)
elif touche == "Down":
coords = (coords[0], coords[1] + 10)
elif touche == "Right":
coords = (coords[0] + 10, coords[1])
elif touche == "Left":
coords = (coords[0] -10, coords[1])
# changement de coordonnées pour le rectangle
canvas.coords(rectangle, coords[0], coords[1], coords[0]+25, coords[1]+25)
# création du canvas
canvas = Canvas(fenetre, width=250, height=250, bg="ivory")
# coordonnées initiales
coords = (0, 0)
# création du rectangle
rectangle = canvas.create_rectangle(0,0,25,25,fill="violet")
# ajout du bond sur les touches du clavier
canvas.focus_set()
canvas.bind("<Key>", clavier)
# création du canvas
canvas.pack()
(https://www.amazon.fr/gp/product/2746071711/ref=as_li_tl?
ie=UTF8&camp=1642&creative=6746&creativeASIN=2746071711&linkCode=as2&tag=pythondjango-
21&linkId=bdf2387af4f5ebddbf6a49ab0369c185)