Bonjour,
(J'utilise python 3.3 sous windows 8)

Je suis confronté au problème suivant: la méthode "bind" ne fonctionne que si le widget associé est la fenêtre elle même. Exemples:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
# ce code fonctionne (si on appuie sur la touche y, la balle se déplace)
from tkinter import*
 
def change_position(event):
    global balle
    can.coords(balle,50,50,60,60)
 
root=Tk()
can=Canvas(root, width=100, height=100, bg='blue')
can.pack()
 
balle=can.create_oval(0,0,10,10, fill='red')
 
root.bind("y", change_position)
 
mainloop()
Mais celui-là non...(can à la place de root)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
from tkinter import*
 
def change_position(event):
    global balle
    can.coords(balle,50,50,60,60)
 
root=Tk()
can=Canvas(root, width=100, height=100, bg='blue')
can.pack()
 
balle=can.create_oval(0,0,10,10, fill='red')
 
can.bind("y", change_position) # can à la place de root #
 
mainloop()
où encore (Frame à la place de Tk):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
from tkinter import*
 
def change_position(event):
    global balle
    can.coords(balle,50,50,60,60)
 
root=Frame()  #Frame à la place de Tk #
can=Canvas(root, width=100, height=100, bg='blue')
can.pack()
 
balle=can.create_oval(0,0,10,10, fill='red')
 
root.bind("y", change_position)
 
mainloop()
Je ne comprends pas pourquoi...et les tutoriels classiques ne parlent pas de ce problème, tous les widgets devraient fonctionner. Cela me gêne dans un programme plus important où je suis obligé de créer ma fenêtre de départ avec tk et non comme Frame. De plus, je dois transmettre aux classes systématiquement le "master" pour que bind marche.

Merci de votre aide