Tkinter et déplacement avec pression au clavier

Tkinter et déplacement avec pression au clavier - Python - Programmation

Marsh Posté le 25-09-2005 à 11:45:35    

A la base, j'avais ça:
 

Citation :

from graph import *
def move(h, v):
 global x, y
 x, y = x+h, x+v
 if x > 270:
  x = 0
 if x < 0:
  x = 270
 if y > 270:
  y = 0
 if y < 0:
  y = 270
 can.coords(rond, x, y, x+30, y+30)
 
x, y = 0, 0
fen= Tk()
fen.title("Le petit bonhomme" )
can=Canvas(fen, bg="grey", height=300, width=300)
rond=can.create_oval(x, y, x+30, y+30, width=2, fill="blue" )
can.bind("z", move(-10, 0))
can.bind("q", move(0, -10))
can.bind("d", move(0, 10))
can.bind("s", move(10, 0))
can.grid(row=0, column=0)
fen.mainloop()


 
je l'ai modifié en ça:
 

Citation :

from graph import *
def movez(event):
 move(-10, 0)
 
def moveq(event):
 move(0, -10)
 
def moved(event):
 move(0, 10)
 
def moves(event):
 move(10, 0)
 
def move(h, v):
 global x, y
 x, y = x+h, x+v
 if x > 270:
  x = 0
 if x < 0:
  x = 270
 if y > 270:
  y = 0
 if y < 0:
  y = 270
 can.coords(rond, x, y, x+30, y+30)
 
x, y = 0, 0
fen= Tk()
fen.title("Le petit bonhomme" )
can=Canvas(fen, bg="grey", height=300, width=300)
rond=can.create_oval(x, y, x+30, y+30, width=2, fill="blue" )
can.bind("z", movez)
can.bind("q", moveq)
can.bind("d", moved)
can.bind("s", moves)
can.grid(row=0, column=0)
fen.mainloop()


 
et ça marche toujours pas. Au fait, si vous trouvez ou ça va pas, vous pourriez m'aider à le faire avec les touches directionnelles ?
 
MErci d'avance.

Reply

Marsh Posté le 25-09-2005 à 11:45:35   

Reply

Marsh Posté le 25-09-2005 à 12:27:12    

[:petrus75]

Citation :

The form of the bind method is:  
 

def bind(self, sequence, func, add=''):


 
where:  
 
sequence  
is a string that denotes the target kind of event. (See the bind man page and page 201 of John Ousterhout's book for details).  
 
func  
is a Python function, taking one argument, to be invoked when the event occurs. An Event instance will be passed as the argument. (Functions deployed this way are commonly known as callbacks.)  
 
add  
is optional, either "" or "+". Passing an empty string denotes that this binding is to replace any other bindings that this event is associated with. Preceeding with a "+" means that this function is to be added to the list of functions bound to this event type.  
For example:  
 

   def turnRed(self, event):
        event.widget["activeforeground"] = "red"
 
    self.button.bind("<Enter>", self.turnRed)




---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 25-09-2005 à 14:32:35    

Are you really english ?

Reply

Marsh Posté le 25-09-2005 à 14:52:03    

hum, non, là j'ai simplement recopié la documentation tkinter située dans la doc python histoire de te montrer que tu n'utilises pas trop tk comme tu es censé le faire...
 
je te suggérerais donc, en concéquence, d'apprendre comment fonctionnent tkinter et python avant de demander pourquoi ce que tu fais ne fonctionne pas.
 
Et accessoirement t'as également oublié de demander l'affichage de ton canvas dans la frame principale, en utilisant grid ou pack.


Message édité par masklinn le 25-09-2005 à 15:02:08

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-09-2005 à 12:15:46    

Non, regarde à la fin

Reply

Marsh Posté le 28-09-2005 à 12:16:40    

Il faut faire les "nid" après ?

Reply

Marsh Posté le 28-09-2005 à 12:17:12    

les "bind" ?

Reply

Marsh Posté le 28-09-2005 à 12:18:48    

[:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-09-2005 à 12:19:39    

J'ai mis les "nid" avant "can.grid("

Reply

Marsh Posté le 28-09-2005 à 12:20:38    

quels nids [:petrus dei]
 
mais de quoi tu parles [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-09-2005 à 12:20:38   

Reply

Marsh Posté le 28-09-2005 à 12:22:25    

non, les "bind", faute de frappe, dsl

Reply

Marsh Posté le 01-10-2005 à 14:10:26    

je voulais dire les 'can.bind("z", fonction)' par exemple.

Reply

Marsh Posté le 02-10-2005 à 13:57:03    

Personne ?

Reply

Marsh Posté le 04-10-2005 à 15:57:52    

Alors, une idée ?

Reply

Marsh Posté le 04-10-2005 à 16:46:40    

ouinnn

Reply

Marsh Posté le 05-10-2005 à 00:32:23    

Je crois que le problème c'est que ton canvas n'a pas le focus. Essaie soit d'ajouter can.focus_set() ou alors utilise bind_all au lieu de bind.
Pour les touches fléchées et autres, tout est ici: http://infohost.nmt.edu/tcc/help/pubs/tkinter/

Reply

Marsh Posté le 05-10-2005 à 12:29:15    

Merci beaucoup. Ca marche mais les direction sont complétemetnt buggées...

Reply

Marsh Posté le 06-10-2005 à 08:27:01    

Haut et bas ne marchent qu'une fois ou alors il faut partir vers le bas pour pouvoir remonter vers le heut et vice-versa... Droite et Gauche partent en diagonale...

Reply

Marsh Posté le 06-10-2005 à 20:19:02    

Relis ton code:
x, y = x+h, x+v  :heink:

Reply

Marsh Posté le 08-10-2005 à 09:51:28    

:lol:  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:  
J'avais pas vu ça !!!!!!!!!!!!
Merci beaucoup, maintenant ça marche très bien.
 :lol:  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:  :lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed