Créer des interfaces graphiques avec Tkinter

Python permet de créer des interfaces graphiques avec Tkinter, une bibliothèque standard destinée aux applications de bureau. Cette bibliothèque est installée avec Python par défaut.

En utilisant une interface graphique, l’utilisateur interagit et manipule les éléments de l’interface appelés widgets. Les boutons et les cases à cocher, permettent à l’utilisateur d’interagir avec le programme. Les fenêtres et les cadres, servent de conteneurs pour d’autres widgets.

interfaces graphiques avec Tkinter

La création des interfaces graphiques avec Tkinter est encore plus facile avec les widgets qui vous aident à créer différents types d’éléments.

Créer votre première fenêtre

Nous allons importer le package Tkinter, créer une fenêtre et lui attribuée un titre.
Nous allons créez un fichier interface.py, qui contiendra le code suivant.

from tkinter import *
window = Tk()
window.title("Apprendre tkinter")
window.mainloop()
créer des interfaces graphiques avec tkiner

Après avoir importé le module tkinter, on a créé une fenêtre principale pour notre interface graphique. En fait, la fenêtre principale est une instance de la classe Tk, qu’on a affectée à la variable window. C’est dans cette fenêtre que nous effectuerons des opérations. Ensuite, nous donnons un titre à la fenêtre, il apparaît en haut chaque fois que vous ouvrez l’application.

Tous les widgets de fenêtre, y compris la fenêtre principale, prennent en charge plusieurs méthodes. La méthode mainloop() est la plus importante. Cette fonction fait appelle à une boucle infinie. Une boucle d’événements indique essentiellement au code de continuer à afficher la fenêtre jusqu’à ce que nous la fermions manuellement.
De plus, aucun code ne s’exécutera après la boucle, jusqu’à ce que la fenêtre sur laquelle elle est appelée soit fermée.

Créer un widget de label

Nous allons utiliser la classe Label pour ajouter du texte à une fenêtre. Créer un widget Label avec du texte, puis l’affecter à une variable. Ajoutez ce code avant mainloop(). En effet, un label n’est rien d’autre que le texte qui doit être affiché dans la fenêtre. On utilise la méthode pack() pour afficher l’objet dans la fenêtre.

label = Label(window, text="Bonjour les champions!", font = ( "Arial Bold" , 30 ))
label.pack()

En utilisant l’attribut font, on a pu définir le style et la taille de la police du label.

De plus, nous pouvons définir la taille de la fenêtre en utilisant la méthode geometry().

window.geometry ( '300x100' )
Créer des interfaces graphiques avec Tkinter

Ajouter un bouton

La création d’un bouton se fait de la même manière que le label.

bouton = Button( window , text = "Clickez ici" )
bouton.pack()

Modifier les couleurs de premier plan et d’arrière-plan

Il est possible de modifier la couleur du premier plan et de l’arrière-plan d’un widget avec les propriétés fg (foreground color) et bg (background-color).

label = Label(window, text="Bonjour les champions!", font = ( "Arial Bold" , 15 ), fg='yellow',bg='black')
label .pack()

bouton = Button( window , text = "Clickez ici", bg = "orange" , fg = "blue" )
bouton.pack()

Ajouter un bouton fonctionnel

Maintenant, ajoutons un bouton dans notre fenêtre qui permet de fermer la fenêtre grâce à la méthode destroy().

bouton = Button( window , text = "Clickez ici", bg = "orange" , fg = "blue", command=window.destroy )
bouton.pack()

Toutefois, il est possible de remplacer window.destroy par une fonction qui sera exécutée au click.

def click():
    label.configure(text="Bravo les amis!")

Remplacez window.destroy par la fonction click, sans parenthèses.

Le widget de saisie – input

En créant des interfaces graphiques avec Tkinter vous aurez la possibilité de créer un widget de saisie, ce qui vous permettra d’écrire du texte dans un champ de saisie.

from tkinter import *

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '500x50' )

label = Label(window, text="Bonjour les champions!", font = ( "Arial Bold" , 15 ), fg='yellow',bg='black')
label .pack()
def click():
    label.configure(text="Bravo les amis!")

saisie = Entry(window, width=10, bg='yellow')
bouton.pack()

bouton = Button( window , text = "Clickez ici", bg = "orange" , fg = "blue", command=click )
bouton.grid(column=2, row=0)

window.mainloop()
tkinter

Gérer l’emplacement des widgets

En créant des interfaces graphiques avec Tkinter, vous aurez certainement besoin de définir les emplacements de vos widgets. En effet, il existe trois méthodes principales :
pack(), grid() et place().
Nous allons utiliser la méthode grid(), qui est basée sur les colonnes et les lignes.

from tkinter import *

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '500x50' )

label = Label(window, text="Bonjour les champions!", font = ( "Arial Bold" , 15 ), fg='yellow',bg='black')
label.grid(column=0, row=0)

saisie = Entry(window, width=10, bg='yellow')
saisie.grid(column=1, row=0)

def click():
    label.configure(text="Bravo les amis!")

bouton = Button( window , text = "Clickez ici", bg = "orange" , fg = "blue", command=click )
bouton.grid(column=2, row=0)

window.mainloop()
tkinter_4

Nos widgets sont sur la même ligne (row = 0) et occupent 3 colonnes (0, 1 et 2), ce qui nous donne un meilleur contrôle des emplacements. Le mot width veut dire la largeur.

Récupérer le texte saisi

Supposons que nous voulions afficher le texte saisi par l’utilisateur. Mais il faut d’abord le récupérer avec la fonction get().

# récupérer les données saisies et les afficher après le click
def click():
    afficher = saisie.get()
    label.configure(text=afficher)

Donc, lorsque vous saisissez du texte, puis vous cliquez sur le bouton, il sera affiché.
Mais, pour saisir un texte on est obligé de cliquer dans la zone saisie. Pour que ça soit automatique, nous utiliserons la méthode focus(). Ajoutez cette ligne après le code de saisie.

saisie.focus()

Cependant, il est possible de désactiver la zone de saisie en définissant la propriété state sur disabled.

saisie = Entry(window,width=10, state='disabled')

Ajouter une liste

Pour ajouter une liste, vous pouvez utiliser la classe Combobox de la bibliothèque ttk. Créez un nouveau fichier tk_test.py qui contiendra le code suivant :

from tkinter import *
from tkinter.ttk import *

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '300x100' )

liste = Combobox(window)
liste['values']= (1, 2, 3, 4, 5, "Text")
liste.current(1) #index de l'élément sélectionné
liste.grid(column=0, row=0)

En fait, vous pouvez ajouter vos valeurs à la liste déroulante.

tkinter_5

Nous définissons les éléments de la liste déroulante en utilisant un tuple.
Pour définir l’élément sélectionné, vous pouvez passer l’index de l’élément à la fonction current().
Pour récupérer l’élément sélectionné, on utilisera la fonction get().

liste.get()

Ajouter un case à cocher

Ajouter un case à cocher se fait grâce à la classe Checkbutton. Afin de définir l’état vérifié, on transmet la valeur de contrôle au bouton à cocher.

from tkinter import *

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '300x100' )

etat = BooleanVar()
etat.set(True) #définir l'état du bouton
cocher = Checkbutton(window, text='Cocher', var=etat)
cocher.grid(column=0, row=0)

window.mainloop()

En fait, nous avons créé une variable de type BooleanVar qui n’est pas une variable Python standard, c’est une variable Tkinter, puis nous la passons à la classe Checkbutton pour définir l’état de vérification de la case.

Vous pouvez définir la valeur booléenne sur False pour la désactiver.

En outre, il est possible d’utiliser IntVar au lieu de BooleanVar et définir la valeur sur 0 ou 1.

Ajouter des cases rondes

L’ajout de boutons radio se fait avec la classe RadioButton.

from tkinter import *

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '300x100' )

rad1 = Radiobutton(window,text='Homme', value=1)
rad2 = Radiobutton(window,text='Femme', value=2)
rad1.grid(column=0, row=0)
rad2.grid(column=1, row=0)
tkinter_6

En outre, on peut définir la commande des boutons sur une fonction spécifique, pour qu’elle soit exécutée suite à un clique.

Récupérer les valeurs du bouton sélectionné

Pour récupérer les valeurs du bouton sélectionné, il faut ajouter le paramètre variable aux boutons radio, puis récupérer sa valeur.

from tkinter import *

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '300x100' )

selected = IntVar()

rad1 = Radiobutton(window,text='Homme', value=1, variable=selected)
rad2 = Radiobutton(window,text='Femme', value=2, variable=selected)

label = Label(window, textvariable=selected)

rad1.grid(column=0, row=0)
rad2.grid(column=1, row=0)
label.grid(column=0, row=1)

window.mainloop()

Les boutons radio du même groupe partagent la même variable selected et sont assignés à des valeurs différentes avec l’option value.

La valeur du bouton sélectionné met à jour la variable selected qui est un IntVar.

Le texte du label reflète automatiquement la valeur du bouton sélectionné.

Ajouter une zone de texte

On utilise la classe ScrolledText. De plus, nous allons définir la largeur et la hauteur avec width et height. Il est également possible de définir le contenu de la zone du texte avec la méthode d’insertion.

from tkinter import *
from tkinter import scrolledtext

window = Tk()
window.title("Apprendre tkinter")
window.geometry('350x200')

txt = scrolledtext.ScrolledText(window,width=40,height=10)
txt.grid(column=0,row=0)

window.mainloop()
tkinter_7

Pour effacer le contenu d’un widget texte, vous pouvez utiliser la méthode delete.

txt.delete(1.0,END)

Créer une boîte de message

La boîte de message Tkinter est une fenêtre contextuelle qui apparaît à l’écran pour vous donner des informations ou vous poser une question.

from tkinter import *
from tkinter import messagebox

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '300x100' )

messagebox.showinfo('Titre du message', 'Le content du message')

window.mainloop()
tkinter_8

Vous pouvez également afficher un message d’avertissement ou un message d’erreur de la même manière.

messagebox.showwarning ( 'Titre du message' , 'Contenu du message' )

messagebox.showerror ( 'Titre du message' , 'Contenu du message' )

Le code ci-dessous affiche des boîtes de messages oui/non à l’utilisateur :

mes = messagebox.askquestion ( 'Titre du message' , 'Contenu du message' ) 

mes = messagebox.askyesno ( 'Titre du message' , 'Contenu du message' ) 

mes = messagebox.askyesnocancel ( 'Titre du message' , 'Contenu du message ' ) 

mes = messagebox.askokcancel ( ' Titre du message ' , ' Contenu du message ' ) 

mes = messagebox.askretrycancel ( ' Titre du message ' , ' Contenu du message ' )

Vous pouvez choisir le style approprié en fonction de vos besoins. Remplacez simplement la ligne de showinfo dans l’exemple précédent.

Le widget SpinBox

Le widget Spinbox est utilisé pour sélectionner un nombre parmi plusieurs valeurs.

from tkinter import *
window = Tk()
window.title("Apprendre tkinter")
window .geometry( '300x100' )

spin = Spinbox(window, from_=0, to=100, width=5)
spin.grid(column=0,row=0)

window.mainloop()

Vous pouvez spécifier les nombres que vous voulez inclure.

spin = Spinbox(window, values=(3, 8, 11), width=5)

Pour définir la valeur par défaut de la Spinbox, vous pouvez transmettre la valeur au paramètre textvariable.

var =IntVar()
var.set(36)
spin = Spinbox(window, from_=0, to=100, width=5, textvariable=var)

Le widget barre de progression

Lorsque vous créez une interface graphique avec tkinter, vous aurez peut-être besoin d’implémenter une barre de progression pour certaines tâches.

from tkinter import *
from tkinter.ttk import Progressbar
from tkinter import ttk

window = Tk()
window.title("Apprendre tkinter")
window .geometry( '300x100' )

style = ttk.Style()
style.theme_use('default')
style.configure("black.Horizontal.TProgressbar", background='black')

bar = Progressbar(window, length=200, style='black.Horizontal.TProgressbar')
bar['value'] = 70
bar.grid(column=0, row=0)

window.mainloop()
tkinter_10

Nous avons défini la valeur de la barre de progression à 70.
De plus, nous avons créé un style en définissant la couleur d’arrière-plan, puis on a défini le style de la barre de progression.

La boite de dialogue pour les fichiers

Réaliser des interfaces graphiques avec Tkinter vous permet également de gérer les fichiers avec le module fileialog en utilisant un ensemble de boîtes de dialogue.

from tkinter import filedialog

file = filedialog.askopenfilename()

Lorsque vous choisissez et ouvrez un fichier, la variable de fichier contiendra son chemin. En outre, vous pouvez demander d’ouvrir plusieurs fichiers.

files = filedialog.askopenfilenames()

Aussi, nous pouvons spécifier les types de fichiers pour une boîte de dialogue à l’aide du paramètre filetypes, spécifier les extensions en tuples.

file = filedialog.askopenfilename(filetypes = (("Text files","*.txt"),("all files","*.*")))

Ou encore, ouvrir un répertoire.

dir = filedialog.askdirectory()

Il est également possible de spécifier le répertoire initial de la boîte de dialogue.

from os import path

file = filedialog.askopenfilename(initialdir= path.dirname(__file__))

La barre de menu

La création d’une interface graphique avec Tkinter vous permet de mettre en place une barre de menu pour afficher toutes sortes de menus.

Nous créons un menu, puis nous ajoutons un label.

from tkinter import Menu

menu = Menu(window)
menu.add_command(label='File')
window.config(menu=menu)

Ajouter des éléments au menu.

menu.add_cascade(label='File', menu=new_item)

Notre code final sera :

from tkinter import *
from tkinter import Menu

window = Tk()
window.title("Apprendre tkinter")

menu = Menu(window)
new_item = Menu(menu)
new_item.add_command(label='Nouveau')
new_item.add_separator()
new_item.add_command(label='Enregistrer')
menu.add_cascade(label='Fichier', menu=new_item)
window.config(menu=menu)

window.mainloop()
tkinter_11

Cliquez sur Fichier, puis sur la ligne pointillée.

Vous pouvez la désactiver en modifiant new_item.

new_item = Menu(menu, tearoff=0)

Je vous rappelle que vous pouvez taper n’importe quel code qui s’exécute lorsque l’utilisateur clique sur n’importe quel élément du menu en utilisant la propriété command.

new_item.add_command(label='New', command=click) #click et le nom de la fonction à exécuter

Le widget notebook permet de basculer entre plusieurs onglets à l’aide d’un onglet d’index. Il vous donne la possibilité d’accéder à des pages en cliquant sur des onglets. En fait, chaque fenêtre enfant est associée à un onglet.

Pour créer un contrôleur d’onglet, nous suivrons les étapes suivantes :

– Créer un contrôleur d’onglet à l’aide de la classe Notebook.
– Créer un onglet en utilisant la classe Frame.
– Ajouter cet onglet au contrôleur d’onglet.
– Inclure le contrôleur d’onglet dans la fenêtre.

from tkinter import *
from tkinter import ttk

window = Tk()
window.title("Apprendre tkinter")

tab_control = ttk.Notebook(window)

tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)

tab_control.add(tab1, text='Onglet1')
tab_control.add(tab2, text='Onglet2')

lbl1 = Label(tab1, text= 'label1')
lbl1.grid(column=0, row=0)
lbl2 = Label(tab2, text= 'label2')
lbl2.grid(column=0, row=0)

tab_control.pack(expand=1, fill='both')

window.mainloop()

Ajouter un espacement pour les widgets

Pour ajouter un rembourrage à un widget, nous utiliserons les propriétés padx et pady.

lbl1 = Label(tab1, text= 'label1', padx=5, pady=5)

Vous pouvez utiliser padx et pady avec n’importe quel widget et leur attribuer des valeurs.

Voici à peut près l’essentiel sur la création des interfaces graphiques avec Tkinter, c’est une bibliothèque simple et facile.

Créer des interfaces graphiques avec Tkinter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Retour en haut