Style de page


phpMyVisites | Open source web analytics phpMyVisites

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


but 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

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

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

menu
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:

tearoff

Les menubuttons

Ce sont des menus attachés à des boutons.
exemple:menubt
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.
canva
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()

photo

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

chkbutton 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

radbutton 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. frame
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()
	

listbox

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

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()