Aller au contenu

Programmation Python/Tkinter

Un livre de Wikilivres.

Créer des interfaces python avec Tkinter

[modifier | modifier le wikicode]

Que faut-il posséder d'abord ?

[modifier | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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

[modifier | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]
  • 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 | modifier le wikicode]

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 | modifier le wikicode]
  • "fg" contient la couleur du texte (en anglais)
  • "bg" contient la couleur de fond du texte (en anglais)

Le widget Entry

[modifier | modifier le wikicode]

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

[modifier | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]

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 | modifier le wikicode]
  • .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 | modifier le wikicode]
#!/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,...)
#!/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 | modifier le wikicode]

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.

  • 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