Tkinter est une adaptation du toolkit tk de tcl à python.
Il permet de créer les widgets (objets graphiques) suivants:
Et si cela ne suffit pas on utiliser des widgets supplémentaires grâce à des extensions comme Bwidget et Iwidget.
Pour placer les widget dans une fenêtre, il existe trois gestionnaires:
- Le packer
- Le grid
- Le placer
On peut créer des évênements avec la commande
bind.
Le packer
La commande
pack permet de placer des widgets soit horizontalement (side=left ou rigth),
soit verticalement (side=top).
Lorsqu'on veut passer d'un placement horizontal à un placement vertical on utilise des frame.
Exemple:
from Tkinter import *
# Création de la fenêtre principale:
root = Tk()
# Titre de la fenêtre:
root.title("pack")
f=Frame(root)
msg="0"
lb1=Label(f,text="message")
entre=Entry(f,textvariable=msg)
lb2=Label(root,text="resultat:")
res=Label(root,textvariable=msg,fg="blue")
# On place les premiers widgets horizontalement dans la frame:
lb1.pack(side="left")
entre.pack()
# puis on place la frame et les autres widget verticalement:
f.pack(side="top")
lb2.pack()
res.pack()
root.mainloop()
Remarque:
f.destroy()
permet de supprimer la frame
f.
f.forget()
retire le widget de l'interface sans le détruire, on peut le replacer avec la commande pack.
Le grid
Le même exemple que préccédement, avec la commande grid:
from Tkinter import *
root = Tk()
msg="0"
lb1=Label(root,text="message")
entre=Entry(root,textvariable=msg)
lb2=Label(root,text="resultat:")
res=Label(root,textvariable=msg,fg="blue")
lb1.grid(row=0,column=0)
entre.grid(row=0,column=1)
lb2.grid(column=1)
res.grid(column=1)
root.mainloop()
Les options column et row permettent de spécifier le positionnement d'un objet.
Dans l'exemple ci-dessus cela permet de se passer d'une frame.
Le placer
La commande place permet de placer un objet graphique (widget) à la position x y:
from Tkinter import *
root = Tk()
lb=Label(root,text="un label")
lb.place(x=50,y=50 )
root.mainloop()
La commande configure
Cette commande permet de modifier des options de n'importe quel widget déjà placé sur l'interface.
Exemple, pour changer la couleur d'un label:
lb.configure(bg="blue",fg="white")
Les évenements
La méthode bind permet d'associer une commande (ou une procédure) à un événement (clavier, souris, focus...).
Quand l'événement a lieu, la commande (ou la procédure) est exécutée.
Synthaxe:
widget.bind(<événement>,commande)
Exemple:
set var 0
set var1 "..."
label .lab -textvariable var
bind .lab <1> { incr var} ;# un click gauche incrémente var1
bind .lab <2> { set var 0} ;# un click du milieu remet var1 à 0
bind .lab <3> { incr var -1} ;# un click droit décrémente var1
label .lab1 -textvariable var1
bind .lab1 { set var1 "Enter" } ;# quand le pointeur de la souris entre dans le widget
bind .lab1 { set var1 "Leave" } ;# quand il en sort
# raccourci clavier pour quitter le programme:
bind . quitter
proc quitter {} {
exit
}
pack .lab .lab1