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 -
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

  1. Phil_1857
     
    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
    1. cattabrini2
       
      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
  2. Phil_1857
     
    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
    1. cattabrini2
       
      D'accord merci bcp je vais essayer et je vous tiens au courant
      0
  3. Phil_1857
     
    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
    1. cattabrini2 Messages postés 2 Statut Membre
       
      oui j'ai bu ca merci bcp ca marche merciiiii!!!
      0