1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| # -*- coding: latin-1 -*-
"""
Created on Fri Jan 16 20:22:50 2015
@author: Jean-Christophe
"""
# -*- coding: latin-1 -*-
from Tkinter import *
#Les coordonnées de la bille doivent être globales
#pour être accessibles et modifiées dans chaque fonction deplacement
x_bille, y_bille = 100, 100
#Nombre de pixels à chaque décalage de la bille. Permet aussi de régler la vitesse de la bille.
decalage_pixels = 8
#Déplacement de la bille (permet d'aller à droite, à gauche, en haut, en bas)
delta_x, delta_y = 0, 0
def calcule_delta(d_x, d_y):
""" Fonction appelée lors de l'appui sur une flèche ou du relâchement d'une touche.
Elle renvoie une fonction dont le paramètre est event et qui modifie le déplacement de la bille grâce
aux variables globales delta_x, delta_y."""
def fonction_temporaire(event) :
print event.keysym
global delta_x, delta_y
delta_x = d_x
delta_y = d_y
return fonction_temporaire
def deplacement() :
""" Fonction appelée régulièrement et qui redessine la bille à sa nouvelle position. """
#On déclare les coordonnées de la bille comme globales pour les modifier.
global x_bille, y_bille
#On modifie les coordonnées de la bille
x_bille += delta_x
y_bille += delta_y
#On redessine la bille dans le canevas
canevas.coords(bille, x_bille, y_bille, x_bille+15, y_bille+15)
if x_bille<800 and y_bille<600 :
#si les coordonnées sont encore dans le canevas, on rappelle la fonction deplacement après 15 ms
fenetre.after(15, deplacement)
#Programme principal
fenetre = Tk()
canevas = Canvas(fenetre, width=800, height=600, bg="white")
canevas.pack()
canevas.bind('<Left>', calcule_delta(-decalage_pixels, 0))
canevas.bind('<Up>', calcule_delta(0, -decalage_pixels))
canevas.bind('<Down>', calcule_delta(0, decalage_pixels))
canevas.bind('<Right>', calcule_delta(decalage_pixels, 0))
canevas.bind('<KeyRelease>', calcule_delta(0, 0))
#On donne un nom à l'item ovale
bille = canevas.create_oval(x_bille, y_bille, x_bille+15, y_bille+15, fill='red')
#On donne le focus à la fenêtre puis au canevas.
fenetre.focus_set()
canevas.focus_set()
#On lance la fonction de déplacement
deplacement()
fenetre.mainloop() |
Partager