Programmation Python/Tkinter
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,...)
Images .gif
[modifier | modifier le wikicode]#!/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.
Voir aussi
[modifier | modifier le wikicode]- 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