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. 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()
     
    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 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. ok,

          "j'ai modifié la nature de lblfirstperson"

          tu as fait quoi ?

          Fait voir le code ...
          1. J'ai l'ai mit en Button :

            lblfirstperson = Button(frame, image=firstpersonimg, bg='white') 
            
            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. 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.