Commencer avec Tkinter

1 – Introduction

Tkinter est un module du langage Python, il est utilisé pour créer des interfaces graphiques. Il existe d’autres manières de faire des interfaces graphiques en Python (Utilisation de Qt par exemple), Cependant, Tkinter reste la bibliothèque la plus connue et la plus utilisée.

Le module « tkinter » est installé avec python, donc pas besoin de l’installer.

2 – Création d’une fenêtre basique

Une fenêtre graphique en « Tkinter » est une objet de type classe « Tk ». Cette classe est définie dans le module python qui s’appelle « tkinter ».

Il existe principalement trois manières pour créer une fenêtre graphique avec tkinter :

2.1 – Approche simple

J’ai appelé la première approche « approche simple » car elle nécessite pas des connaissance en programmation orientée objet python.

Avec cette approche tous les composants graphiques y compris notre fenêtre seront des variables « éparpillées » dans le programme.
Voici le code python pour la création d’une fenêtre basique :

#!/usr/bin/env python3
import tkinter as tk
Fenetre = tk.Tk()
# ... Ajouter des composants graphiques
Fenetre.mainloop()

Le code précédent affiche une fenêtre graphique vide : Aucun composant graphique dessus. Pour y ajouter des widgets, il faut les mettre dans la partie commentaire (avant dernière ligne).

Figure 1: Première fenêtre avec tkinter

2.2 – Approche par composition

La deuxième approche consiste à définir une classe, « Fenetre » par exemple, composée d’un objet de type classe « Tk ». La classe « Fenetre » possédera des attributs qui représenteront tous les composants graphiques de la fenêtre.

Le diagramme de classes UML qui correspond à cette approche est donné dans le figure suivante :

Figures 2 : Diagramme UML de composition

Voici un exemple de code qui permet de créer une fenêtre vide en utilisant l’approche par composition :

import tkinter as tk
class Fenetre:
def __init__(self):
f = tk.Tk()
# ... Ajouter des composants graphiques comme des attributs

f = Fenetre()
f.f.mainloop()

Le code précédent affiche une fenêtre vide comme celle de la figure 1.

2.3 – Approche par héritage

La troisième approche consiste à définir une classe, « Fenetre » par exemple, qui hérite de la classe « Tk ». Ainsi, la classe « Fenetre » va contenir tous ses composants graphiques comme des attributs.

La figure suivante montre le diagramme UML qui correspond à l’approche par héritage.

Figure 3 : Diagramme UML d’héritage

L’exemple ci-dessous permet de créer une fenêtre vide en utilisant l’approche par héritage :

import tkinter as tk
class Fenetre(tk.Tk):
  def __init__(self):
  tk.Tk.__init__(self)
# ... Ajouter des composants graphiques comme des attributs

f = Fenetre()
f.mainloop()

Le résultat est le même que celui montré dans figure 1.

3 – Conclusion

Parmi les trois approches présentées plus haut, il est toujours préféré d’opter pour la troisième approche surtout quand il s’agit de projets de grandes tailles. En effet, le code est mieux organisé et donc facile maintenir et à évoluer.

La première approche est adapté pour des programmes simples et/ou de petites tailles.