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

Tkinter Python Discussion :

retour de text bouton


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut retour de text bouton
    Bonjour, je débute en Python, pouvez-vous m'aider?
    Je crée n boutons, et je n'arrive pas à récuperer la valeur liée au bouton sur lequel on clique

    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
    18
    import Tkinter as Tk
     
    def AfficheLabel(txt):
        label.config(text = txt)
     
    root = Tk.Tk()
    label = Tk.Label(root, text = "Clic sur le bouton ")
    label.grid(row = 0, column = 0, columnspan = 3)
    svEntry = Tk.StringVar()
    edit = Tk.Entry(root, textvariable = svEntry)
    edit.grid(row = 1, columnspan = 3)
    n = 1
    while n<=3:
        bou = "bout"+str(n)
        btn = Tk.Button(root, text = bou, command = lambda x=svEntry:AfficheLabel("valeur de l'entry: "+bou))
        btn.grid()
        n = n+1
    root.mainloop()

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Salut Qbitus

    Sur différents forum, j'ai lu que pour ce type de récupération, on est obligé de passer par des variables intermédiaires pour que python puisse effectuer l'opération de transfert des données correctement.
    Ici c'est svEntry que tu avait déjà et labelVariable que j'ai complété.
    je débute aussi en python et je ne saurais te donner l'explication exacte du pourquoi du comment de la chose, mais je constate que cela fonctionne.

    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
    18
    19
    20
    21
    22
    23
    24
    import Tkinter as Tk
     
    # Rajouter
    def recup():
        print " je suis dans recup" 
        labelVariable.set( svEntry.get()+" "+bou )
     
    root = Tk.Tk()
    svEntry = Tk.StringVar()
    edit = Tk.Entry(root, textvariable = svEntry)
    edit.grid(row = 1, columnspan = 3)
    labelVariable = Tk.StringVar()# Rajouter
    label = Tk.Label(root, textvariable=labelVariable)
    labelVariable.set("Zone affichage !")
    label.grid(row = 0, column = 0, columnspan = 3)
     
    n = 1
    while n<=3:
        bou = "bout"+str(n)
        btn = Tk.Button(root, text = "bou", command = recup )# Modifier
        n = n+1
        btn.grid()
     
    root.mainloop()

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Salut Alberth, et merci de ton intervention, seulement ça ne marche apparemment pas... en fait, je voudrais qu'un click sur un bouton me retourne le n° du bouton : 'bout' + str(n). Cela fontionne pour créer le texte du bouton, mais au click, j'obtiens tjrs n = 3 quelque soit le bouton choisi!
    Je contine les fouilles, merci encore.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Autant pour moi, j'avais cru comprendre, au vue de "command = lambda x=svEntry:AfficheLabel("valeur de l'entry: "+bou)" que c'était le contenu de l'ENTRY que tu voulais.
    Sinon et au passage,quant à utiliser l'astuce de la boucle pour créer les boutons, autant continuer dans l'économie de ligne de code avec ceci:

    while n<=3:
    btn = Tk.Button(root, text = "bout"+str(n), command = lambda x=svEntry:AfficheLabel("valeur de l'entry: "+bou)).grid()
    n = n+1

    Sa fonctionne tout aussi bien.

    Pour ce qui est de "la valeur liée au bouton sur lequel on clique" désolé, mais pour le moment je ne voit pas. Je continue mes tests et si je trouve quelque chose je reviendrais.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    J'ai pensé qu'en récupérant la valeur text des boutons, à travers l'attribut .cget,cela aurait pu donner quelque chose, mais j'ai toujours la valeur du dernier bouton créé qui est retouner ce qui reste logique vu la boucle While.
    A mon avis, pour éviter l'usine à gaz, tu ne pourra pas faire l'économie d'un codage pour chaque bouton, car la boucle While va inévitablement retenir la variable n à sa dernier valeur.

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Salut Alberth !
    j'ai pris en compte ce que tu m'as dit pour simplifier, par contre, pour ne pas rester bloqué, je vais être obligé d'écrire le code n fois, 7, en l'occurance! avec plein d'autres objets que les boutons, malgré tout, je ne peux pas croire qu'il n'y a pas de solution, je crois que j'aurais su faire ça en FoxPro, mais il y a longtemps! il suffirait de savoir retourner bouton.text, j'ai essayé les listes et autres dico, pas moyen!! à mon niveau en tous cas.
    Merci encore, mais je garde un oeil là dessus !

  7. #7
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Si j'ai bien compris :
    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
    18
    import Tkinter as Tk
     
    def AfficheLabel(texte):
        svEntry.set(texte)
     
    root = Tk.Tk()
    label = Tk.Label(root, text = "Clic sur le bouton ")
    label.grid(row = 0, column = 0, columnspan = 3)
    svEntry = Tk.StringVar()
    edit = Tk.Entry(root, textvariable = svEntry)
    edit.grid(row = 1, columnspan = 3)
    n = 1
    while n<=3:
        btn = Tk.Button(root, text = "bout"+str(n))
        btn.config(command=lambda x=btn.cget('text'):AfficheLabel("valeur de l'entry: "+x))
        btn.grid()
        n = n+1
    root.mainloop()

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    La phrase magique, je suppose !! command=lambda x=btn.cget('text')
    Merci Pierjean, ça marche, et il faut que j'applique ça pour une appli où j'ai n occurances d'une fiche qui comporte aussi des radiobutton, des text et des entry, <n> étant assez variable, j'avais interet à passer par là, merci encore,et aussi à Alberth, je crois que je peux marquer 'résolu' ! j'avais peur d'être obligé de passer par self et init que je n'ai pas encore digérés.

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Qbitus Voir le message
    La phrase magique, je suppose !! command=lambda x=btn.cget('text').
    Non, car je l'avais utilisé est aucun résultat.
    C'est ce que je disais plus haut à propos du .cget.
    Par contre la véritable phrase magique c'est bien toute la partie :
    "btn.config(command=lambda x=btn.cget....."

    Merci pour ton aide pierjean, j'en ai appris un peu plus.

  10. #10
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Bonjour,

    je ne parviens pas à bien placer mes scroll bar dans le code suivant.
    Au départ, j'ai tout fait avec des frames et j'ai lu qu'il fallait un canvas.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    self.f_middle = Tkinter.Frame(self.root)
            self.f_middle.grid(row=1, column=0)
     
            #------------------
            #    Middle West
            #------------------
            self.f_left = Tkinter.Frame(self.f_middle)
            self.f_left.grid(row=0, column=0)
     
            # Scroll bars
            self.vsb = Tkinter.Scrollbar(self.f_left, orient=Tkinter.VERTICAL)
            self.vsb.grid(row=0, column=1, sticky=Tkinter.N+Tkinter.S)
            self.hsb = Tkinter.Scrollbar(self.f_left, orient=Tkinter.HORIZONTAL)
            self.hsb.grid(row=1, column=0, sticky=Tkinter.E+Tkinter.W)
     
            self.c = Tkinter.Canvas(self.f_left,yscrollcommand=self.vsb.set, xscrollcommand=self.hsb.set)
            self.c.grid(row=1, column=0, sticky="news")
            self.vsb.config(command=self.c.yview)
            self.hsb.config(command=self.c.xview)
     
     
            buttonsAndCheckBoxName = {}
            for sect in self.process.sections:
                actionsName = []
                for act in sect.actions:
                    actionsName.append(act.name)
                buttonsAndCheckBoxName[sect.name] = actionsName
            self.boutons = {}
            for bname, lacname in buttonsAndCheckBoxName.items():
    #            but = Tkinter.Button(self.f_left, text=bname,width=15)
                but = Tkinter.Button(self.c, text=bname,width=15)  
                but.configure(command=lambda xb=but: self.select_section(xb))
                but.pack()
     
                lcheck = []
                for acname in lacname:
                    c_act = Tkinter.Checkbutton(self.c, text=acname)
                    c_act.var = Tkinter.IntVar()
                    c_act.configure(variable=c_act.var)
                    c_act.pack(side=Tkinter.TOP, anchor='nw')
                    lcheck.append(c_act)
                self.boutons[but] = lcheck
    Je ne vois pas trop le problème...
    J'obtiens comme l'image ci-joint à ce post. C'est moche et surtout inutile là où cela est placé !!! comme les boutons que l'on voit avec les checkbox sont construits dynamiquement, je peux me retrouver avec une longue liste. D'où mon intérét pour la scroll bar

    Des idées svp ?
    Images attachées Images attachées  
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/06/2012, 18h36
  2. Simple texte bouton
    Par kikica dans le forum Delphi
    Réponses: 5
    Dernier message: 13/06/2007, 14h30
  3. activer input text bouton radio
    Par ilood dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/05/2007, 17h43
  4. Ajout zone texte + Boutons
    Par thedevil dans le forum GTK+
    Réponses: 5
    Dernier message: 06/05/2007, 10h55
  5. Changer texte bouton de de type file
    Par sokette dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/01/2006, 17h36

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