Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Récupérer texte d'un bouton dans une variable.

Récupérer texte d'un bouton dans une variable.

Remonter à Forum général Python
  • Récupérer texte d'un bouton dans une variable.

    Envoyé par Dansleschoux le 19 Mai 2012 à 09:55
    Bonjour,
    J'ai créé une centaine de boutons, chacun porte un nombre (text = ).
    Je voudrais, lorsqu'un clic est réalisé sur un des boutons, pouvoir récupéréer le nombre correspondant dans une variable. J'imagine que cela est possible avec la méthode .bind, mais je n'y parviens pas.
    Merci de votre aide.
    • Re: Récupérer texte d'un bouton dans une variable.

      Envoyé par jacko le 21 Mai 2012 à 11:40
      Bonjour,

      Pour les boutons, il y a un bind prédéfini : il suffit de spécifier la fonction à exécuter sous "command=".

      Exemple :

      def ff(num):
      print("bouton %d"%num)

      for i in range(100):
      Button(parent,text=str(i),command=lambda i=i:ff(i)).grid(row=1,column=1)



    • Re: Récupérer texte d'un bouton dans une variable.

      Envoyé par Dansleschoux le 21 Mai 2012 à 13:28
      Bonjour Jacko et merci de votre réponse.
      Je suis quasi débutant en python et je n'arrive pas à adapter la solution que tu me donnes à mon projet, en particulier à cause de i que je n'utilise pas.
      Je crains également de ne pouvoir récupérer que le texte du dernier bouton crée.
      Pourriez-vous éclairer ma lanterne ?
      Merci d'avance, cf: ci-dessous:

      from tkinter import *
      r = Tk()
      can = Canvas(r, bg = "white")
      can.pack(padx = 465, pady = 50)
      l = 0
      c = 1
      while l < 5:
      while c < 10:
      b = Button(can, text = str(l) + str(c), bg = "light green", relief = RAISED,
      activebackground = "white", bd = 2)
      b.grid(row = l, column = c, padx = 5, pady = 5)
      c += 1
      c = 0
      l += 1
      r.mainloop()
    • Re: Récupérer texte d'un bouton dans une variable.

      Envoyé par Dansleschoux le 21 Mai 2012 à 13:30
      Bonjour Jacko et merci de votre réponse.
      Je suis quasi débutant en python et je n'arrive pas à adapter la solution que vous me donnez à mon projet, en particulier à cause de i que je n'utilise pas.
      Je crains également de ne pouvoir récupérer que le texte du dernier bouton crée.
      Pourriez-vous éclairer ma lanterne ?
      Merci d'avance, cf: ci-dessous:

      from tkinter import *
      r = Tk()
      can = Canvas(r, bg = "white")
      can.pack(padx = 465, pady = 50)
      l = 0
      c = 1
      while l < 5:
      while c < 10:
      b = Button(can, text = str(l) + str(c), bg = "light green", relief = RAISED,
      activebackground = "white", bd = 2)
      b.grid(row = l, column = c, padx = 5, pady = 5)
      c += 1
      c = 0
      l += 1
      r.mainloop()
    • Re: Récupérer texte d'un bouton dans une variable.

      Envoyé par Lexileduval le 21 Mai 2012 à 22:46
      Salut,

      Quelques conseils pour t'aider à apprendre :

      1) Ton code serait beaucoup plus agréable à lire avec les indentations (bon ce n'est pas facile, il faut le faire manuellement sur ce forum je crois. Mais l'indentation est très importante en Python).

      2) Tu n'as pas besoin des boucles "while" puisque tu connais déjà toutes les étapes de tes boucles. Une boucle "for i in range(n)" est aussi efficace et évitera d'obtenir par erreur une boucle infinie (et allégera aussi ton code).
    • Re: Récupérer texte d'un bouton dans une variable.

      Envoyé par jacko le 22 Mai 2012 à 11:43
      Bonjour,

      1/ Pour suivre le conseil n°1 de Lexileduval, vous devez placer votre code entre les balises [ code ] et [ /code ] afin qu'il s'affiche correctement, avec les indentation notamment, comme ci-dessous.
      2/ Pour le conseil n°2, voir ci-dessous l'utilisation de for...range(). Votre utilisation de while...c+=1 fonctionne mais n'est pas pythonesque (vous devez connaître déjà un autre langage).
      3/ Pour récupérer le libellé du bouton, on utilise cget(). Pour cela, j'ai remplacé dans la fonction ff() le numéro en argument par le bouton lui-même.
      ff() est toujours appelée au clic par "command=...".
      En général, on écrit quelque chose comme :
      def mafonction():
      ...
      command=mafonction

      Ici, pour des raisons subtiles, on est obligé d'écrire :
      command=lambda bt=b: ff(bt)
      C'est compliqué, ne cherchez pas à comprendre pour le moment, cela viendra plus tard.

      Dans ff(), on récupère le libellé dans num. Ici, on l'affiche, mais vous pouvez bien sûr en faire ce que vous voulez. Attention, ce libellé est une chaîne de caractères. Si vous voulez sa valeur numérique, il faut la convertir : val=int(num).

      Voilà, bon courage.


      from tkinter import *
      r = Tk()
      can = Canvas(r, bg = "white" )
      can.pack(padx = 465, pady = 50)

      def ff(bt):
      num=bt.cget("text")
      print(num)

      for l in range(5):
      for c in range(10):
      b = Button(can, text = str(l) + str(c), bg = "light green", relief = RAISED,
      activebackground = "white", bd = 2)
      b.config(command=lambda bt=b: ff(bt))
      b.grid(row = l, column = c, padx = 5, pady = 5)

      r.mainloop()

    • Re: Récupérer texte d'un bouton dans une variable.

      Envoyé par Dansleschoux le 22 Mai 2012 à 12:55
      Bonjour et merci beaucoup lexileduval et jacko.
      J'ai pratiqué QBasic que j'ai beaucoup apprécié pendant plusieurs années. Le passage à Python est loin d'être évident pour moi.
      Le code que vous me proposez répond parfaitement à mes attentes, bien que je n'en comprenne pas les subtilités.
      Merci encore.
Rendu par Ploneboard