Recuperer une variable d'un evenement KeyPress (avec Tkinter)

Résolu
enzo_8226 Messages postés 10 Date d'inscription samedi 24 avril 2021 Statut Membre Dernière intervention 26 avril 2021 - 24 avril 2021 à 19:38
enzo_8226 Messages postés 10 Date d'inscription samedi 24 avril 2021 Statut Membre Dernière intervention 26 avril 2021 - 25 avril 2021 à 08:53
Bonjour, Je j'ai créé une fonction qui me renvoie x=1 et je souhaiterais l'activer lorsqu'on appuie sur entrée comme ceci:
___________________________________________
class Comencer(Texte):
def init(self,canvas):

self.canvas.bind_all('<KeyPress-Return>',self.debut_de_partie)

def debut_de_partie(self,evt):
self.cacher(canvas)
x=1
return x
______________________________________

Comment récupérer la variable x lorsqu'on appuie sur "entrée" ?
J'ai essayé ces méthodes qui n’ont pas fonctionnées:

1)x=self.canvas.bind_all('<KeyPress-Return>', self.debut_de_partie)
résultat : me donne une suite de chiffre incohérent au lieu de me donner 1, même lorsque j'appuie sur entrée.

2)self.canvas.bind_all('<KeyPress-Return>', x=self.debut_de_partie)
résultat, une erreur s'affiche : unexpected keyword argument "x"

Comment faire pour récupérer la variable x de la fonction début_de_partie en appuyant sur entrée?
A voir également:

4 réponses

Gandalfix Messages postés 84 Date d'inscription vendredi 12 juin 2020 Statut Non membre Dernière intervention 18 avril 2024 7
25 avril 2021 à 08:20
Bonjour,

bind() ne s'applique qu'au widget spécifique
bind_class() s'applique aux widgets de la classe
bind_all() s'applique sur toute l'application

Voir : https://tkinterexamples.com/events/events.html

Dans votre programme quelle variable est sensée récupérer la valeur du x ?
À moins que x soit la variable à modifier et qu'il faille la déclarer en global dans la fonction où elle est modifiée (debut_de_partie).
Dans cette fonction, l'argument à passer est event et non evt : debut_de_partie(self, event)
1
Gandalfix Messages postés 84 Date d'inscription vendredi 12 juin 2020 Statut Non membre Dernière intervention 18 avril 2024 7
24 avril 2021 à 21:18
Bonjour,

Pourquoi bind_all et non bind ?
Pourquoi <KeyPress-Return> et non <Return> ?

Présentez mieux votre code (https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code) car là c'est peu lisible.
0
enzo_8226 Messages postés 10 Date d'inscription samedi 24 avril 2021 Statut Membre Dernière intervention 26 avril 2021 1
Modifié le 24 avril 2021 à 23:14
ok je reposte mon code
class Comencer(Texte):
    def init(self,canvas):
        
        self.canvas.bind_all('<KeyPress-Return>',self.debut_de_partie)
    
    def debut_de_partie(self,evt):
        self.cacher(canvas)
        x=1
        return x


Bind_all et keypress-return c'est la fonction telle qu'elle est décrite dans mon livre de python. Je débute encore, est ce que vraiment y a une différence dans cette problématique?
J'aimerais juste récuperer le x de la 2ème fonction en appuyant sur entrée
0
enzo_8226 Messages postés 10 Date d'inscription samedi 24 avril 2021 Statut Membre Dernière intervention 26 avril 2021 1
25 avril 2021 à 08:53
merci, grâce a toi, j'ai réussit a faire fonctionner mon programme, j'ai changé l'argument evt par event et j'ai déclaré la variable x comme globale a l’intérieure de la fonction au lieu d'essayer de la récupérer depuis l’extérieur. Par contre si on met juste Bind() au lieu de Bind_all() rien ne se passe, Met bon j'ai réussit ce que je voulais faire.
class Comencer(Texte):
    def init(self,canvas):
        
        self.canvas.bind_all('<KeyPress-Return>',self.debut_de_partie)
    
    def debut_de_partie(self,event):
        self.cacher(canvas)
        global x
        x=1
        print(' x = ', x)
0
Rejoignez-nous