IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Tkinter - modifier le texte d'un bouton en cliquant dessus


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Tkinter - modifier le texte d'un bouton en cliquant dessus
    Bonjour à tous.

    Je m'arrache les cheveux avec ce langage depuis plusieurs jours, aussi je fais appel à la communauté.

    Je cherche a permettre de changer le nom d'un bouton en cliquant dessus.

    Comme je fais une grille j'ai une petite centaine de boutons dont la création se fait de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for ligne in range (1,11):# Boutons des cases A1 à J10 colonnes 1 à 10 
        for colonne in range (1,11):
            Button(fenetre, name = "posJoueur" + '%s%s' % (EnteteCol[colonne],ligne), width = 3, heigh = 1,borderwidth=1,command = lambda x="posJoueur" + '%s%s' % (EnteteCol[colonne],ligne):case_clic(x)).grid(row=ligne, column=colonne)
    La fonction case_clic doit créer un texte sur le bouton, qui au départ n'en a pas.

    c'est quelque-chose de simple dans le style

    Def case_clic (boutonId)
    boutonid.text = "Mon texte"

    Mais ça ne marche pas car, dans le cadre de ce code, c'est du texte qui est renvoyé et non le nom du bouton, et si je désire envoyer un self, comme le bouton n'est pas créer il me répond qu'n objet nul n'a pas de fonction de commande.

    je deviens fou ! merci pour votre aide.

  2. #2
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Bonjour,

    Pourquoi ne pas passer par une liste si tu connais le nom des boutons ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste = [0]*10
     
    for i in range(11):
        Button(fen, text=liste[i]).pack()
    Petit rappel si tu souhaites changer un mot dans une liste sans trop te prendre la tête tu as liste[0] = "nouveau" après dans une boucle liste[i] = "nouveau"

    EDIT:
    je penses, qu'il faudrait que tu nommes tes boutons dans une variable, à vouloir faire trop court, tu pousses la difficulté à son paroxysme !
    une fois nommé, tu pourras surement faire un bou1.config(text=boutonId).

    En espérant t'avoir aidé.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci de cette réponse.

    Actuellement, j'ai 4 tableaux de 10x10 soit 400 boutons... à mettre en liste ? Non, je ne pense pas que ça le fasse.

    Non, il faut (simplement) que je puisse attraper l'identité du bouton sur lequel je clique pour le passer en paramètre de la fonction.

    Ca doit quand même être réalisable ce truc là, non ?

    j'ai aussi essayé un format comme celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    import tkinter as tk 
     
    def changeTexte(self): 
          self.text = "Bouton2"
     
    root = tk.Tk()
     
    tk.Button(root, text = "Button1").config(command = changeTextel(self)).grid(row = 2, column = 0)
     
     
    root.mainloop()
    Mais là aussi, c'est la catastrophe. Le .grid ne prend pas après le .config, qui lui même n'est pas pris après le .grid. Enfin c'est inextricable ce truc.

    Mais, merci beaucoup pour ta proposition.

    Si tu as une autre idée, je suis preneur.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut

    EDIT:[/COLOR][/B]
    je penses, qu'il faudrait que tu nommes tes boutons dans une variable, à vouloir faire trop court, tu pousses la difficulté à son paroxysme !
    une fois nommé, tu pourras surement faire un bou1.config(text=boutonId).

    En espérant t'avoir aidé.[/COLOR]
    Je suis d'accord.

    J'ai aussi essayé cette méthode.

    Malheureusement, j'ai tenté d'appliquer la formule du "name = "posJoueur" + '%s%s' % (EnteteCol[colonne],ligne)" pour nommer ma variable. Là-non plus, ça ne prend pas.

    Un tip ?

  5. #5
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Hum je suis en train de chercher dans mon coin.
    Afin de nommer un bouton j'ai trouvé ça et ça soulève aucune erreur de mon côté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    from tkinter import *
     
    liste = ["var"]*11
     
    def changetext():
        for i in range(len(liste)):
            liste[i].config(text="NewBou")
     
    fen = Tk()
    can = Canvas(fen)
    can.pack()
    for i in range(len(liste)):
        liste[i] = Button(fen,text="var",command = changetext)
        liste[i].pack()
     
    fen.mainloop()
    en revanche, il change tous les boutons ^^"

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tk.Button(root, text = "Button1").config(command = changeTextel(self)).grid(row = 2, column = 0)
    D'après toi, quelle est la signification de self ?


    Essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import tkinter as tk
    def set_text(btn):
        btn.config(text="New")
     
    root = tk.Tk()
    button = tk.Button(root, text="Old")
    button.config(command=lambda x=button: set_text(x)) 
    button.grid(row=2, column=2)
    root.mainloop()

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci à tous

    je me suis inspiré de vos propositions ainsi que d'autres façons de faire trouvées sur le net.

    J'ai utilisé la notion de "fermeture"

    Voici le lien de ma base de solution :

    http://tarball69.developpez.com/tuto...faq/#LIII-C-10

    Merci encore de votre aide.

    Je pose une autre question dans ce nouveau topic http://www.developpez.net/forums/d15...n/#post8256874, si vous pouvez aussi m'aider rapidement.


Discussions similaires

  1. [XL-2003] Modifier le texte sur un bouton affecté à une macro
    Par Un Internaute dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/10/2014, 17h46
  2. Réponses: 2
    Dernier message: 20/09/2014, 09h28
  3. [XL-2003] Modifier le texte d'un bouton macro
    Par peofofo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/01/2010, 19h00
  4. afficher le nom d'un bouton en cliquant dessus
    Par sebac dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/06/2009, 11h54
  5. Modifier le texte d'un bouton (Caption) dans une document
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 27/08/2008, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo