Problème : N'arrive pas à synchroniser un Button et une touche de clavier

Résolu/Fermé
cattabrini2 Messages postés 2 Date d'inscription dimanche 22 mars 2020 Statut Membre Dernière intervention 23 mars 2020 - 22 mars 2020 à 11:38
cattabrini2 Messages postés 2 Date d'inscription dimanche 22 mars 2020 Statut Membre Dernière intervention 23 mars 2020 - 23 mars 2020 à 12:17
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 ...
0
cattabrini2
22 mars 2020 à 23:36
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
0
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()
0
cattabrini2
23 mars 2020 à 10:44
D'accord merci bcp je vais essayer et je vous tiens au courant
0
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()

:-)
0
cattabrini2 Messages postés 2 Date d'inscription dimanche 22 mars 2020 Statut Membre Dernière intervention 23 mars 2020
23 mars 2020 à 12:17
oui j'ai bu ca merci bcp ca marche merciiiii!!!
0