Créer des interfaces python avec Tkinter

modifier

Que faut-il posséder d'abord ?

modifier

Tkinter (pour Tool kit interface) est une boîte à outils d'interface graphique pour Python.

L'interface Tkinter s'installe avec Python. Il suffit donc juste d'installer Python 2.3 ou 2.4 ou supérieur pour pouvoir utiliser Tkinter. Sinon :

apt-get install python-tk

Ensuite il vous suffit d'importer la bibliothèque dans votre programme  :

from tkinter import *

Principes de base

modifier

Créez un fichier texte dans le dossier python 2.4 ou python 2.3.

Donnez-lui le nom que vous voulez, mais pour que votre fichier puisse être interprété par python, il doit porter l'extension .py ou .pyw

Créez donc un fichier du type : monfichier.py (dans ce cas, la console s'affichera, ce qui peut être pratique pour suivre le fonctionnement du programme)

ou monfichier.pyw (dans ce cas la console ne s'ouvrira pas : c'est ce type d'extension qu'il faut utiliser pour la version définitive du programme).

Pour modifier le programme :

  • clic droit sur le fichier
  • ouvrir avec un logiciel d'édition de texte pur.

Créer une fenêtre pour l'application

modifier

Propriétés et méthodes de l'objet fenêtre

modifier

le programme est le suivant :

from tkinter import *   # le programme va aller chercher toutes les fonctions de la bibliothèque Tkinter
Fenetre= Tk()           # vous pouvez choisir le nom que vous voulez pour votre fenêtre
Fenetre.mainloop()     # lance la boucle principale

Qu'est-ce qu'un widget ?

modifier

widget : contraction de l'anglais windows gadget (gadget fenêtre). Les widgets sont tous les objets graphiques que l'on peut insérer dans une interface (fenêtre). Les principaux sont :

  • Les boutons : Button (pour commander une action)
  • Les labels : Label (pour insérer un texte)
  • Les zones de saisie : Entry (pour permettre l'entrée d'une donnée)
  • Les canevas : Canvas (pour insérer des dessins)

Chaque widget a des propriétés et des méthodes qui permettent de régler son apparence et les interactions avec l'utilisateur.

Le widget Button

modifier

Chaque widget (objet d'interface) doit être créé puis placé dans la fenêtre

#!/usr/bin/python        # Emplacement de l’interpréteur Python (sous Linux)
# -*- coding: utf-8 -*-  # Définition l'encodage des caractères
from tkinter import * # le programme va aller chercher toutes les fonctions de la bibliothèque Tkinter
Fenetre= Tk() # création de la fenêtre, avec un nom de votre choix
bouton=Button(Fenetre, text="quitter", command=Fenetre.destroy) # Bouton qui détruit la fenêtre
bouton.pack()        # insère le bouton dans la fenêtre
Fenetre.mainloop()       # lance la boucle principale
  • La commande Fenetre.destroy() est une méthode de destruction qui s'applique à l'objet fenêtre. La pression du bouton a donc pour conséquence la fermeture de la fenêtre Fenetre

propriétés et méthodes de l'objet "bouton"

modifier
  • Ce qui sera affiché sur votre bouton est contenu dans la propriété "text", passée ici en paramètre de l'objet "bouton".
  • La procédure "command" permet une action lorsqu'on clique sur ce bouton. Cette procédure peut également être choisie parmi les fonctions définies dans le programme.

Le widget Label

modifier

L'incontournable "Hello world"

#!/usr/bin/python        # Emplacement de l’interpréteur Python (sous Linux)
# -*- coding: utf-8 -*-  # Définition l'encodage des caractères
from tkinter import *
Fenetre=Tk()
texte=Label(Fenetre, text="Hello World")
texte['fg']='black'  # Création du texte "Hello World" de couleur noire
texte.pack() # Insère le texte dans la fenêtre
Fenetre.mainloop()

Propriétés et méthodes de l'objet label

modifier
  • "fg" contient la couleur du texte (en anglais)
  • "bg" contient la couleur de fond du texte (en anglais)

Le widget Entry

modifier

Propriétés et méthodes de l'objet Entry

modifier

L'objet Entry() est une zone de saisie de texte que l'on crée de la manière suivante:

#!/usr/bin/python        # Emplacement de l’interpréteur Python (sous Linux)
# -*- coding: utf-8 -*-  # Définition l'encodage des caractères
from tkinter import * #On importe l'ensemble du module Tkinter
Fenetre = Tk() 
Entree = Entry(Fenetre)     # On définit l'objet Entry qui porte le nom Entree
Entree.pack()               # On place "Entree"
Fenetre.mainloop()          # On lance la boucle du programme

Vous pouvez l'utiliser dans des situations plus complexes comme, par exemple, un formulaire que je vous laisserai examiner:

#!/usr/bin/python        # Emplacement de l’interpréteur Python (sous Linux)
# -*- coding: utf-8 -*-  # Définition l'encodage des caractères
from tkinter import *

def repondre():
 affichage['text'] = reponse.get()	# lecture du contenu du widget "reponse"

Fenetre = Tk()
Fenetre.title('Mon nom')

nom = Label(Fenetre, text = 'Votre nom :')
reponse = Entry(Fenetre)
valeur = Button(Fenetre, text =' Valider', command=repondre)
affichage = Label(Fenetre, width=30)
votre_nom=Label(Fenetre, text='Votre nom est :')
nom.pack()
reponse.pack()
valeur.pack()
votre_nom.pack()
affichage.pack()

Fenetre.mainloop()

Le widget Canvas

modifier

Le widget Canvas (canevas, en français) est une zone de dessin rectangulaire.

Notons que l'angle haut gauche du canevas est l'origine des coordonnées (x,y)=(0,0).

Un exemple d'utilisation :

#!/usr/bin/python        # Emplacement de l’interpréteur Python (sous Linux)
# -*- coding: utf-8 -*-  # Définition l'encodage des caractères

from tkinter import *

racine= Tk()

zone_dessin = Canvas(racine, width=500, height=500) #Définit les dimensions du canevas
zone_dessin.pack() #Affiche le canevas
zone_dessin.create_line(0,0,500,500) #Dessine une ligne en diagonale
zone_dessin.create_rectangle(100,100,200,200) #dessine un rectangle

bouton_sortir = Button(racine,text="Sortir",command=racine.destroy)
bouton_sortir.pack()

racine.mainloop()

Quelques propriétés de l'objet Canvas

modifier

Les propriétés sont définies en paramètre lors de la construction de l'objet

  • height : Hauteur Y du canvas
  • width  : Largeur X du canvas
  • bg  : Couleur de fond du canvas
  • bd  : Taille en pixels du bord du canvas (2 par défaut)
  • relief : Style de la bordure (flat (par défaut),raised,sunken,groove,ridge)
  • ...

Quelques méthodes du widget Canvas

modifier
  • .create_arc(): Pour créer un arc de cercle
  • .create_bitmap(): Image bitmap
  • .create_image(): Image graphique
  • .create_line(): Pour créer une ligne
  • .create_oval(): Pour créer un cercle ou une ellipse
  • .create_polygon(): Pour créer un polygone
  • .create_rectangle(): Pour créer un rectangle
  • .create_text(): Texte
  • .create_window(): Une fenêtre rectangulaire

Exemple supplémentaire

modifier
#!/usr/bin/python
# -*- coding: utf-8 -*-

from tkinter import *

Fenetre=Tk()	#La fonction Tk() du module Tkinter permet de créer une fenêtre qui se nomme Fenetre
Fenetre.title("Mon programme avec Tkinter") # Donne un titre à la fenêtre (par défaut c'est Tk)

# Dans Fenetre nous allons créer un objet type Canvas qui se nomme zone_dessin
# Nous donnons des valeurs aux propriétés "width", "height", "bg", "bd", "relief"
zone_dessin = Canvas(Fenetre,width=500,height=500,
			            bg='yellow',bd=8,relief="ridge")
zone_dessin.pack() #Affiche le Canvas

#Nous allons maintenant utiliser quelques méthodes du widget "zone_dessin"
zone_dessin.create_line(0,0,500,500,fill='red',width=4) # Dessine une ligne
zone_dessin.create_line(0,500,500,0,fill='red',width=4) # Dessine une ligne
zone_dessin.create_rectangle(150,150,350,350) # Dessine un rectangle
zone_dessin.create_oval(150,150,350,350,fill='white',width=4) # Dessine un cercle

# boutons_sortir est un widget de type "Button"
# dont nous définissons les propriétés "text" et "command")
bouton_sortir= Button(Fenetre,text="Sortir",command=Fenetre.destroy)
# la commande "destroy" appliquée à la fenêtre détruit l'objet "Fenetre" et clôture le programme
bouton_sortir.pack()

Fenetre.mainloop() # Lancement de la boucle du programme, en attente d'événements (clavier, souris,...)

Images .gif

modifier
#!/usr/bin/python
# -*- coding: utf-8 -*-

from tkinter import *
Fenetre=Tk()
photo=PhotoImage(file="Wikibooks.gif")
labl = Label(Fenetre, image=photo)
labl.pack()
Fenetre.mainloop()

Installation des Python méga-widgets

modifier

Python megawidgets (Pmw) est un créateur de widget utilisant Tkinter.

Visitez le site web : http://pmw.sourceforge.net et cliquez sur le lien : « Download Pmw12tar.gz » pour télécharger le fichier correspondant.

Décomprimez ce fichier archive dans un répertoire temporaire, à l'aide d'un logiciel de décompression tel que tar, Winzip, Info-Zip, unzip

Recopiez l'intégralité du sous-répertoire Pmw qui s'est créé automatiquement, dans le répertoire où se trouve déjà l'essentiel de votre installation de Python.

Sous Windows, il s'agira par exemple de C:\Python23.

Sous Linux, il s'agira vraisemblablement de /usr/lib/python.

Voir aussi

modifier
  • PMW (Python megawidgets) pour ajouter des menus déroulants, cases à cocher et autres boites de dialogues.
  • PIL (Python Imaging Library) pour incruster des images.
  • py2.exe : pour créer des exécutables (limité à Python 2.6).
  • tkRAD: Tkinter XML widget builder : pour générer automatiquement des widgets Tkinter à partir d'un fichier source XML.
  • (anglais) Site officiel