Problème avec .bind Tkinter

Résolu
Mattgamer -  
Mattgamer2 Messages postés 4 Statut Membre -
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. Mattgamer2 Messages postés 4 Statut Membre
     
    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()
     
    0
  2. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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')
    0
  3. Mattgamer2 Messages postés 4 Statut Membre
     
    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...
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    ok,

    "j'ai modifié la nature de lblfirstperson"

    tu as fait quoi ?

    Fait voir le code ...
    0
  6. Mattgamer2 Messages postés 4 Statut Membre
     
    J'ai l'ai mit en Button :

    lblfirstperson = Button(frame, image=firstpersonimg, bg='white') 
    
    0
  7. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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()
    
    0
  8. Mattgamer2 Messages postés 4 Statut Membre
     
    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.
    0