Problème avec .bind Tkinter

Résolu
Bonjour,
je code en python, et j'ai découvert il y'a quelques semaines la bibliothèque Tkinter. Cependant, je n'arrive pas a faire fonctionner une de mes fonction avec ce module. J'ai codé une fonction qui devrait (en théorie) changer la position d'un label personnage lorsqu'on appuie sur la flèche haut. Je ne sais pas pourquoi, ca ne marche pas.

Voici un exemplaire de mon code :

from Tkinter import *

xfirstperson=11
yfirstperson=6

def gest_mouvement_haut(event) :
mouvement_haut()

def mouvement_haut() :
global yfirstperson
global xfirstperson
if yfirstperson != 0 :
yfirstperson += 1
lblfirstperson.grid(column=xfirstperson, row=yfirstperson)

fenetre = Tk() # Creation de la fenetre racine
fenetre.title('Escape Game 2D')

frame = Frame(fenetre, bd=1, bg='black', relief='solid')
frame.grid(column=0, row=0)

firstpersonfile="C:\users\Administrateur\Desktop\Python\Perso\Sauvegarde et dossiers utilise par python\FirstPerson.gif"
firstpersonimg = PhotoImage(file = firstpersonfile)
gifsdict[firstpersonfile] = firstpersonimg
lblfirstperson = Label(frame, image=firstpersonimg, bg='white')
lblfirstperson.grid(column=xfirstperson, row=yfirstperson)
lblfirstperson.bind('<Up>', gest_mouvement_haut)

fenetre.mainloop()

S'il vous plait, aidez moi...

Configuration: Windows / Chrome 49.0.2623.112

8 réponses

  1. Merci beaucoup Phil. J'ai fait un copier coller de ton code qui fonctionne. Je l'ai étudier et j'ai rajouter la ligne

    e2.focus()
    


    Maintenant, ça fonctionne. Merci beaucoup Bro.
    1. oui mais le bouton n'est activé que si on le clique, et de plus, tu n'as pas mis le bind dessus

      de plus, je me demande si ca marche avec grid(column=xfirstperson, row=yfirstperson)

      Ici, un exemple qui fonctionne chez moi en utilisant .place()

      Fais un copié/collé du code dans un nouveau fichier et execute-le pour voir et dis-moi si ca marche:

      from Tkinter import *
      
      xfirstperson=11 
      yfirstperson=6 
      
      def gest_mouvement_haut(event) : 
          mouvement_haut() 
      
      def mouvement_haut() : 
          global yfirstperson 
          global xfirstperson
      
          if yfirstperson != 0 : 
              yfirstperson += 5
              e2.place(x = xfirstperson,y = yfirstperson)
      
      fenetre = Tk() # Creation de la fenetre racine 
      fenetre.title('Escape Game 2D') 
      fenetre.geometry('300x200+300+100')
      
      e2 = Entry(fenetre)
      e2.grid(column=xfirstperson, row=yfirstperson) 
      e2.bind('<Up>', gest_mouvement_haut)
      e2.focus()
      
      fenetre.mainloop()
      
      1. J'ai l'ai mit en Button :

        lblfirstperson = Button(frame, image=firstpersonimg, bg='white') 
        
        1. ok,

          "j'ai modifié la nature de lblfirstperson"

          tu as fait quoi ?

          Fait voir le code ...
          1. Bonjour Phil,
            j'ai modifier la nature de lblfirstperson. Par contre, ça ne marche toujours pas. J'ai mis une print dans la fonction gest_mouvement_haut, mais lorsque je lance le programme et que j'appuie sur la flèche du haut, le bouton reste immobile et rien n'est renvoyé dans la console...
            1. Bonjour Mattgamer2,

              C'est normal

              lblfirstperson.bind('<Up>', gest_mouvement_haut) 


              lblfirstperson est un Label, donc un objet pour écrire du texte, et donc il n'est jamais activé par

              un appui de touche ou un clic de souris

              Il faudrait utiliser un bouton ou une Entry

              De plus, tu devrais agrandir ta fenêtre:

              fenetre.geometry('300x200+300+100')
              1. Bonjour yg_be,
                desolé, je n'ai pas été précis. Le label personnage est censé être repositionné, mais il ne se passe rien. J'ai fait quelque test avec print, et il semble que le programme n'accede meme pas a la fonction 'gest_mouvement_haut' (ça ne renvoie rien dans la console).

                Voici mon la partie de mon code impliquée :

                from Tkinter import * 
                
                xfirstperson=11 
                yfirstperson=6 
                
                def gest_mouvement_haut(event) : 
                    mouvement_haut() 
                
                def mouvement_haut() : 
                    global yfirstperson 
                    global xfirstperson 
                    if yfirstperson != 0 : 
                        yfirstperson += 1 
                        lblfirstperson.grid(column=xfirstperson, row=yfirstperson) 
                
                fenetre = Tk() # Creation de la fenetre racine 
                fenetre.title('Escape Game 2D') 
                
                frame = Frame(fenetre, bd=1, bg='black', relief='solid') 
                frame.grid(column=0, row=0) 
                
                
                firstpersonfile="C:\users\Administrateur\Desktop\Python\Perso\Sauvegarde et dossiers utilise par python\FirstPerson.gif" 
                firstpersonimg = PhotoImage(file = firstpersonfile) 
                gifsdict[firstpersonfile] = firstpersonimg 
                lblfirstperson = Label(frame, image=firstpersonimg, bg='white') 
                lblfirstperson.grid(column=xfirstperson, row=yfirstperson) 
                lblfirstperson.bind('<Up>', gest_mouvement_haut) 
                
                fenetre.mainloop()