Problème avec .bind Tkinter [Résolu]

Signaler
-
Messages postés
4
Date d'inscription
lundi 2 novembre 2020
Statut
Membre
Dernière intervention
3 novembre 2020
-
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

Messages postés
13363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
30 novembre 2020
750
bonjour,
"ca ne marche pas": peux-tu donner quelques informations factuelles?
merci d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
4
Date d'inscription
lundi 2 novembre 2020
Statut
Membre
Dernière intervention
3 novembre 2020

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()
 
Messages postés
662
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
29 novembre 2020
80
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')
Messages postés
4
Date d'inscription
lundi 2 novembre 2020
Statut
Membre
Dernière intervention
3 novembre 2020

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...
Messages postés
662
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
29 novembre 2020
80
ok,

"j'ai modifié la nature de lblfirstperson"

tu as fait quoi ?

Fait voir le code ...
Messages postés
4
Date d'inscription
lundi 2 novembre 2020
Statut
Membre
Dernière intervention
3 novembre 2020

J'ai l'ai mit en Button :

lblfirstperson = Button(frame, image=firstpersonimg, bg='white') 
Messages postés
662
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
29 novembre 2020
80
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()
Messages postés
4
Date d'inscription
lundi 2 novembre 2020
Statut
Membre
Dernière intervention
3 novembre 2020

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.