Problème avec .bind Tkinter

Résolu/Fermé
Mattgamer - 2 nov. 2020 à 18:05
Mattgamer2 Messages postés 4 Date d'inscription lundi 2 novembre 2020 Statut Membre Dernière intervention 3 novembre 2020 - 3 nov. 2020 à 13:46
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

yg_be Messages postés 22825 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 mai 2024 1 471
2 nov. 2020 à 20:50
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
0
Mattgamer2 Messages postés 4 Date d'inscription lundi 2 novembre 2020 Statut Membre Dernière intervention 3 novembre 2020
Modifié le 3 nov. 2020 à 10:48
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
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 3 nov. 2020 à 11:12
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
Mattgamer2 Messages postés 4 Date d'inscription lundi 2 novembre 2020 Statut Membre Dernière intervention 3 novembre 2020
3 nov. 2020 à 12:38
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
3 nov. 2020 à 12:46
ok,

"j'ai modifié la nature de lblfirstperson"

tu as fait quoi ?

Fait voir le code ...
0
Mattgamer2 Messages postés 4 Date d'inscription lundi 2 novembre 2020 Statut Membre Dernière intervention 3 novembre 2020
Modifié le 3 nov. 2020 à 12:52
J'ai l'ai mit en Button :

lblfirstperson = Button(frame, image=firstpersonimg, bg='white') 
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 3 nov. 2020 à 13:01
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
Mattgamer2 Messages postés 4 Date d'inscription lundi 2 novembre 2020 Statut Membre Dernière intervention 3 novembre 2020
3 nov. 2020 à 13:46
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