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 :

Groupe fonctionnel de Radiobutton


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut Groupe fonctionnel de Radiobutton
    Salut les pythons,
    Je n'arrive pas a créer un groupe fonctionel de Radiobutton car j'arrive a mes fins: exécuter une commande quand on selectionne un des choix, mais j'ai un petit soucis qui est que tous les Radiobutton sont selectionner et je pense que c'est du a ce qu'il ne soit pas regrouper dans un groupe fonctionnel ou ce comportement est-il normal ?
    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
     
    from Tkinter import *
    def test_1() :
      global z
      z.configure(text='button 1')
     
    def test_2() :
      global z
      z.configure(text='button 2')
     
    def test_3() :
      global z
      z.configure(text='button 3')
     
    def test_4() :
      global z
      z.configure(text='button 4')
     
    a=Tk()
    b=Radiobutton(a, text='test 1', command=test_1)
    c=Radiobutton(a, text='test 1', command=test_2)
    d=Radiobutton(a, text='test 1', command=test_3)
    e=Radiobutton(a, text='test 1', command=test_4)
    z=Label(a)
    z.pack()
    b.pack()
    c.pack()
    d.pack()
    e.pack()
    a.mainloop()
    On doit normalement utilser un StringVar ou un IntVar pour les regrouper avec l'option variable mais je n'y arrive pas.
    Sa serai sympa de m'aider a créer un groupe fonctionnel avec les IntVar|StringVar qui ne sont pas mes meilleurs amis.

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    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
    from Tkinter import *
     
    def labelchange():
        z.configure(text=v.get())
     
    a=Tk()
     
    z=Label(a)
    z.pack()
     
    v = StringVar()
    v.set('button 1')
     
    Radiobutton(a, text="test 1", variable=v, value='button 1', command=labelchange).pack()
    Radiobutton(a, text="test 2", variable=v, value='button 2', command=labelchange).pack()
    Radiobutton(a, text="test 3", variable=v, value='button 3', command=labelchange).pack()
    Radiobutton(a, text="test 4", variable=v, value='button 4', command=labelchange).pack()
     
    a.mainloop()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v = StringVar()
    v.set('button 1')
    On crée une instance de la classe variable et on mets à jour avec une première valeur (sinon tous les Radiobutton sont sélectionnés au début)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Radiobutton(a, text="test 1", variable=v, value='button 1', command=labelchange).pack()
    Ensuite on crée les Radiobutton en les associant à v (variable=v). On leurs donnent leurs valeur (value='button 1') et la commande si v change.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def labelchange():
        z.configure(text=v.get())
    Comme on utilise une méthode de z pas besoin de global.
    Puisque command viens d'indiquer que v à changer il suffit de faire v.get() pour avoir sa nouvelle valeur.

    Autre approche

    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
    from Tkinter import *
     
    def labelchange(*args):
        print args
        z.configure(text=v.get())
     
    a=Tk()
     
    z=Label(a)
    z.pack()
     
    v = StringVar()
    v.trace('w', labelchange)
    v.set('button 1')
     
    Radiobutton(a, text="test 1", variable=v, value='button 1').pack()
    Radiobutton(a, text="test 2", variable=v, value='button 2').pack()
    Radiobutton(a, text="test 3", variable=v, value='button 3').pack()
    Radiobutton(a, text="test 4", variable=v, value='button 4').pack()
     
    a.mainloop()
    Ici plus de command mais v.trace('w', labelchange).
    A chaque fois qu'un Radiobutton vas changer la valeur de v cela déclenche le callback (en écriture ici).
    Je t'ai mis un print pour que tu vois bien le tuple passé en argument par trace.

    @+

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Re,

    Petite note sur le deuxième exemple
    Tu remarqueras que j'ai créer z avant le .trace
    Pourquoi ? Car le set juste après est pris en compte et que dans labelchange() j'utilise z.
    Si on ne souhaite pas que cela se produise et déclarer z après on dois faire le set() avant le trace().
    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
    from Tkinter import *
     
    def labelchange(*args):
        z.configure(text=v.get())
     
    a=Tk()
     
    v = StringVar()
    v.set('button 1')
    v.trace('w', labelchange)
     
    z=Label(a)
    z.pack()
     
    Radiobutton(a, text="test 1", variable=v, value='button 1').pack()
    Radiobutton(a, text="test 2", variable=v, value='button 2').pack()
    Radiobutton(a, text="test 3", variable=v, value='button 3').pack()
    Radiobutton(a, text="test 4", variable=v, value='button 4').pack()
     
    a.mainloop()
    Il est aussi possible de ne pas avoir de bouton par défaut

    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
    from Tkinter import *
     
    def labelchange(*args):
        z.configure(text=v.get())
     
    a=Tk()
     
    v = StringVar()
     
    z=Label(a)
    z.pack()
     
    Radiobutton(a, text="test 1", variable=v, value='button 1').pack()
    Radiobutton(a, text="test 2", variable=v, value='button 2').pack()
    Radiobutton(a, text="test 3", variable=v, value='button 3').pack()
    Radiobutton(a, text="test 4", variable=v, value='button 4').pack()
     
    v.trace('w', labelchange)
    v.set('Choisissez')
     
    a.mainloop()
    @++

  4. #4
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Merci pour la | les réponses majistrale claire net et précis:
    j'ai parfaitement saisis la méchanique: je ne comprenait pas que le IntVar|StringVar représentait la valeur par défaut et je ne savait pas que la valeur du IntVar | StringVar changerai automatiquement quand on selectionne un Radiobutton ; implémenter un callback avec .trace est une bonne extension du sujet.
    Merci beaucoup PauseKawa tu m'as permis de me réconsilier avec les Radiobutton et les avec les String|Int Var que je comprend mieux maintenant.

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

Discussions similaires

  1. Group by et dépendance fonctionnelle : Performance ?
    Par xanav dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/04/2012, 11h45
  2. Lier des valeurs à un RadioButton group
    Par pansoul dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 19/05/2010, 11h10
  3. index d un group de radiobutton via binding
    Par ZashOne dans le forum Windows Forms
    Réponses: 3
    Dernier message: 13/02/2009, 17h32
  4. Groupe social sur les langages fonctionnels
    Par gorgonite dans le forum Langages fonctionnels
    Réponses: 0
    Dernier message: 02/02/2009, 09h00
  5. [JTable][RadioButton]Afficher groupe de boutons dans JTable
    Par leminipouce dans le forum Composants
    Réponses: 11
    Dernier message: 21/02/2006, 17h04

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