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