Correction TD 5
Exercice 1
from Tkinter import *
# gestionnaires d evenements :
def depl_gauche(c=0):
#argument "c" pour faire focntion le
"bind" sans utiliser d'objets
global x1, y1, x2,y2
x1=x1-10
x2=x2-10
can1.coords(oval1, x1, y1, x2,
y2)
def depl_droite(c=0):
global
x1, y1, x2,y2
x1=x1+10
x2=x2+10
can1.coords(oval1, x1, y1, x2,
y2)
def depl_haut(c=0):
global x1,
y1, x2,y2
y1=y1-10
y2=y2-10
can1.coords(oval1, x1, y1-10, x2,
y2-10)
def depl_bas(c=0):
global x1, y1, x2,y2
y1=y1+10
y2=y2+10
can1.coords(oval1, x1, y1+10, x2,
y2+10)
#------ Programme principal -------
#
les variables suivantes seront utilisees de maniere globale :
x1,
y1, x2, y2 = 10, 10, 90, 40 #
coordonnees initiales
# Creation du widget principal
("maitre") :
fen1 = Tk()
fen1.title("Exo de
Tkinter")
# creation des widgets "esclaves"
:
can1 = Canvas(fen1,bg='dark grey',height=300,width=300)
oval1
=
can1.create_oval(x1,y1,x2,y2,width=1,fill='green')
can1.pack(side=LEFT)
#
capture les evenements sur les touches clavier
fen1.bind("<Left>",
depl_gauche)
fen1.bind("<Right>",
depl_droite)
fen1.bind("<Up>",
depl_haut)
fen1.bind("<Down>", depl_bas)
#cree
et affiche les
boutons
Button(fen1,text='Quitter',command=fen1.quit).pack(side=BOTTOM)
Button(fen1,text='Gauche',command=depl_gauche).pack()
Button(fen1,text='Droite',command=depl_droite).pack()
Button(fen1,text='Haut',command=depl_haut).pack()
Button(fen1,text='Bas',command=depl_bas).pack()
#
demarrage du receptionnaire d evenements (boucle principale)
:
fen1.mainloop()
Exercice 2
# calculette en python
from Tkinter import *
def click(key):
if key == "=":
val =""
try:
val = eval(entry.get())
except:
val= "Error !"
entry.delete(0, END)
entry.insert(END, val)
elif key == "C":
entry.delete(0, END)
else:
entry.insert(END, key)
root = Tk()
root.title("Calculette ultra simple")
btn_list = ['7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-','0', 'C', '.', '+' ]
# creation des bouton a partir d'une liste
r = 1
c = 0
for b in btn_list:
cmd = lambda x=b: click(x)
tmp = Button(root,text=b,width=5,relief='ridge', command=cmd)
tmp.grid(row=r,column=c)
c += 1
if c > 3: #4 colonnes max
c = 0
r += 1
# zone de saisie/affichage
entry = Entry(root, width=18, bg="#ccccff")
entry.grid(row=0, column=0, columnspan=3)
#dernier bouton pour les resultats
tmp = Button(root,text="=",width=5,relief='ridge',command=lambda x="=": click(x))
tmp.grid(row=0,column=3)
root.mainloop()