Cette page n'a pas pour but de détailler toutes les options disponibles pour chaque widget (objet graphique) de tkinter,
mais simplement de présenter quelques exemples simple d'utilisation.
Ces exemples sont les même que sur la page
tcl/tk,
vous pouvez ainsi facilement comparer les deux langages.
Le widget button
Création d'un boutton:
from Tkinter import *
root=Tk()
b= Button(root,text="Quitter",command=root.quit)
b.pack()
root.mainloop()
Le widget label
Le widget label permet d'afficher du texte.
from Tkinter import *
root=Tk()
lb1= Label(root,text="Bonjour")
nom=StringVar()
lb2= Label(root,textvariable=nom)
nom.set(raw_input("Entrez votre nom ? "))
lb1.pack(side="left")
lb2.pack()
root.mainloop()
Le widget entry
Le widget entry est un widget d'entrée de texte simple.
Exemple:
from Tkinter import *
root=Tk()
saisie=StringVar()
lb1= Label(root,textvariable=saisie,width=30,foreground="blue")
ent=Entry(textvariable=saisie,width=30)
ent.pack()
lb1.pack()
root.mainloop()
Le widget text
Exemple:
# Test widget text
from Tkinter import *
root=Tk()
txt=Text(root,width=40,height=15)
txt.pack()
txt.insert(END,"Test du widget text\n")
button = Button(txt, text="Quit", command=root.quit)
txt.window_create(INSERT, window=button)
root.mainloop()
Les menus
Un exemple de menu:
from Tkinter import *
root = Tk()
#root.geometry("200x50")
def chtitre(choix):
root.title(choix)
def chcolor(choix):
root.tk_setPalette(choix)
# Création de la barre de menu:
menu1 = Menu(root)
# Création du menu fichier:
fichier = Menu(menu1, tearoff=0)
menu1.add_cascade(label="Fichier",menu=fichier)
fichier.add_command(label="Quit", command=root.quit)
cascad = Menu(menu1, tearoff=0)
menu1.add_cascade(label="Cascade",menu=cascad)
titre = Menu(cascad, tearoff=0)
cascad.add_cascade(label="Titre",menu=titre)
titre.add_command(label="menu demo", command=lambda : chtitre('menu demo'))
titre.add_command(label="Test", command=lambda : chtitre('test'))
color = Menu(cascad)
cascad.add_cascade(label="Couleur",menu=color)
color.add_command(label="bleu", command=lambda : chcolor('blue'))
color.add_command(label="rouge", command=lambda : chcolor('red'))
# afficher le menu
root.config(menu=menu1)
root.mainloop()
Remarque:
Que signifie l'option
tearoff=0 ?
Cette option est un booléen qui indique si le menu doit être détachable.
Par défaut cette option vaut 1,
pour qu'un menu ne soit pas détachable il faut rajouter l'option
tearoff=0.
Dans l'exemple ci-dessus, j'ai laissé la valeur par défaut pour le menu couleur,
on peut voir sur l'image (ci-dessus à droite) une ligne en pointillés au début du menu.
Si on clique sur cette ligne, cela ouvre une petite fenêtre contenant les entrées du menu:
Les menubuttons
Ce sont des menus attachés à des boutons.
exemple:
from Tkinter import *
root = Tk()
def chtitre(choix):
root.title(choix)
def chcolor(choix):
root.tk_setPalette(choix)
mb1=Menubutton(root,text="Fichier",relief="raised")
mb1.m=Menu(mb1,tearoff=0)
mb1.m.add_command(label="Quitter", command=root.quit)
mb1.config(menu=mb1.m)
mb1.pack(side="left",pady=4,padx=4)
mb2=Menubutton(root,text="Cascade",relief="raised")
cascad=Menu(mb2,tearoff=0)
mb2.config(menu=cascad)
titre=Menu(cascad,tearoff=0)
cascad.add_cascade(label="titre",menu=titre)
titre.add_command(label="menu demo", command=lambda : chtitre('menu demo'))
titre.add_command(label="Test", command=lambda : chtitre('test'))
color=Menu(cascad)
cascad.add_cascade(label="Couleur",menu=color)
color.add_command(label="bleu", command=lambda : chcolor('blue'))
color.add_command(label="rouge", command=lambda : chcolor('red'))
mb2.pack(pady=4)
root.mainloop()
On crée d'abord les menubouton, puis on crée des menus à l'intérieur de ceux ci.
Les canvas
Un canvas est une zone dans laquelle on peut dessiner des lignes, rectangles , cercles, arcs,
courbes ou encore afficher des images.
Exemple:
from Tkinter import *
root = Tk()
canv=Canvas(root,width=100,height=100)
canv.pack()
canv.create_rectangle((2,2,99,99),fill="white",outline="blue")
canv.create_line((10,30,30,80),fill="red",width=2)
canv.create_oval((30,10,60,30),fill="yellow",outline="cyan")
canv.create_polygon((40,40, 55,50, 70,40, 60,55, 70,70, 55,60, 40,70, 50,55),fill="green")
root.mainloop()
Le widget photo
Ce widget permet d'afficher des images dans un label ou un canva.
Exemple:
from Tkinter import *
root = Tk()
photo=PhotoImage(file="tux1.gif")
labl = Label(root, image=photo)
labl.pack() ;
root.mainloop()
Il faut bien sûr que le fichier image (tux1.gif) soit dans le même répertoire que le script python.
Par défaut on ne peu afficher que des images aux formats gif ou ppm,
pour afficher d'autres formats d'image, on peut utiliser la bilbiothèque
PIL
CheckButton

Ce sont des cases à cocher.
Exemple:
from Tkinter import *
import sys
root=Tk()
val=1
chk=Checkbutton(root,textvariable=val,variable=val)
chk.grid()
root.mainloop()
RadioButton

Un radiobutton ressemble un peu a un checkbutton, à la différence près
que l'on peut associer plusieurs radiobutton à une même variable et définir
pour chacun d'entre eux la valeur qui sera affecté à la variable lorsque celui-ci sera coché.
Exemple:
from Tkinter import *
import sys
root=Tk()
r1=Radiobutton(root,text="1",variable=myvar,value="1")
r2=Radiobutton(root,text="2",variable=myvar,value="2")
r3=Radiobutton(root,text="3",variable=myvar,value="3")
r1.grid()
r2.grid()
r3.grid()
root.mainloop()
Les frames
Une frame est une zone qui peut contenir plusieurs widget, elle sert à organiser le placement de ces widgets.
Exemple:
from Tkinter import *
root=Tk()
f1=Frame(root)
but1=Button(f1,text="Quitter",command=root.quit)
but2=Button(f1,text="Bouton 2")
but3=Button(f1,text="Bouton 3")
lab= Label(root,text="Ceci est un label rouge sur fond blanc",fg="red",bg="white")
but1.pack(side="left")
but2.pack(side="left")
but3.pack()
f1.pack()
lab.pack()
root.mainloop()
Le widget labelframe
C'est une frame avec un titre:
frame1=Labelframe(root,text="Frame 1")
frame1.pack()
Les listbox
Pour afficher des listes:
# Test widget listbox
from Tkinter import *
def onSelect(e):
select=listb.get(listb.curselection())
lab.configure(text=select)
listb.configure(bg=select)
root=Tk()
listb=Listbox(root)
lab=Label(root,text="_")
listb.pack()
lab.pack()
# Insertion des éléments dans la liste:
for couleur in ["gray", "blue", "red", "yellow", "green", "cyan", "seashell2", "ivory", "skyblue", "gold"]:
listb.insert(END,couleur)
# Un double click dans la liste appellera la fonction onSelect:
listb.bind('<Double-1>',onSelect)
root.mainloop()
Lorsqu'on clique sur un élément de la liste, la fonction onSelect est appellé.
Cette fonction change la couleur de fond de la liste en fonction de l'élément sélectionné.
Paned windows
Ce widget permet de séparer une fenêtre (ou frame, ou un toplevel) en deux zones ajustables.
Exemple:
from Tkinter import *
root=Tk()
root.geometry("200x100")
pane=PanedWindow(orient=HORIZONTAL) ;# ou VERTICAL
pane.pack(expand="yes",fill="both")
left=Label(pane,text="Côté gauche",bg="yellow")
right=Label(pane,text="Côté droite",bg="white")
pane.add(left)
pane.add(right)
root.mainloop()
L'option
orient (horizontal ou vertical) permet de définir le sens (horizontal ou vertical) de séparation de la fenêtre.
Le fenêtre toplevel
Le widget toplevel permet d'ouvrir de nouvelles fenêtres.
Exemple:
from Tkinter import *
def opentop():
t1=Toplevel()
t1.title("Nouvelle fenetre")
ferme=Button(t1,text="Fermer",command=t1.destroy)
ferme.pack()
root=Tk()
b= Button(root,text="Nouvelle fenetre",command=opentop)
b.pack()
root.mainloop()