Problème : N'arrive pas à synchroniser un Button et une touche de clavier [Résolu]

Signaler
Messages postés
2
Date d'inscription
dimanche 22 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020
-
cattabrini2
Messages postés
2
Date d'inscription
dimanche 22 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020
-
Bonjour j'ai un projet en ISN pour le bac. J'aimerais qu'au lieu d'utiliser la souris, je puisse appuyer sur une touche du clavier qui activerais alors le Button. J'ai un début de programme mais tkinter me dit : "TypeError: destroy() takes 1 positional argument but 2 were given"

Comment faire ? Merci d'avance

from tkinter import*
root=Tk()
Button(root, text="Cliquez moi", command=root.destroy).pack()
root.bind("<a>",root.destroy)
root.mainloop()

3 réponses

Bonsoir Cattabrini2,

Je me demande si on peut lier une touche du clavier a la commande destroy
en effet, les callback fonctions liées a des touches reçoivent un argument :

def show_result(event):
……

e2.bind("<Return>", show_result)

et du coup, dans ce cas je pense qu'on passe aussi l'objet à détruire (ici: root), ce qui fait bien 2 arguments, et destroy n'en n' attend qu'un seul ...

Ah mince ne connaissez pas un moyen de faire ça autrement alors ???? disons que vu que c'est pour un jeu nous trouvons ça plus pratique que les professeurs appui sur le clavier et non ne bouge pas la souris
Bonjour Cattabrini2,

Bah, on peut appeler une fonction qui recevra 'event' , donc on s'affranchit déjà de cet argument, et on appelle destroy avec, qui ne reçoit donc que l'objet à détruire, j'ai testé ceci :

# -*- coding:Latin-1 -*-

from tkinter import *

def detruire_la_fenetre_principale(event):
fenetre_princ.destroy()

LARGEUR=400
HAUTEUR=100

fenetre_princ = Tk()
fenetre_princ.title('''Appuyer sur 'a' pour détruire la fenetre''')
fenetre_princ.geometry(str(LARGEUR)+'x'+str(HAUTEUR)+'+300+100')

btn1 = Button(fenetre_princ, text ="Détruire la fenetre", command = fenetre_princ.destroy)
btn1.pack(pady = 10)

fenetre_princ.bind('<a>', detruire_la_fenetre_principale)

#Pour utiliser n'importe quelle touche :
#fenetre_princ.bind('<Key>', detruire_la_fenetre_principale)

fenetre_princ.mainloop()

D'accord merci bcp je vais essayer et je vous tiens au courant
après avoir envoyé ma réponse, je vois que les indentation de mon script n'apparaissent pas , donc :

ne pas oublier de mettre 4 espaces dans la fonction devant
fenetre_princ.destroy()

:-)
cattabrini2
Messages postés
2
Date d'inscription
dimanche 22 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020

oui j'ai bu ca merci bcp ca marche merciiiii!!!