Problème : N'arrive pas à synchroniser un Button et une touche de clavier
Résolu
cattabrini2
Messages postés
2
Statut
Membre
-
cattabrini2 Messages postés 2 Statut Membre -
cattabrini2 Messages postés 2 Statut Membre -
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()
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 ... -
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() -
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()
:-)