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 :

création automatique de checkbutton [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut création automatique de checkbutton
    bonjour,

    je me casse la tête sur ça depuis pas mal de temps et je n'y arrive pas!
    j'en appel donc à vos lumière.
    j'essaie de créer des checkbutton automatiquement à partir d'une liste.
    plutôt que de créer en dur les checkbutton dans le programme et pour qu'il soit évolutif, je récupère via un xml la liste des checkbutton à créer.

    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 traitement_CB():
    	print(CB1.get())
    	print(CB2.get())
    	print(CB3.get())
     
    fen1 = Tk()
    fen1.title("checkbutton auto")
     
    liste_CB=('CB1','CB2','CB3')  #liste des checkbutton à créer récupéré de l'xml
    liste_onvalue=(17,24,100)   #liste des onvalue à affecter
    rowz=1
     
    for CB in liste_CB:
    	indexCB=liste_CB.index(CB)  #on récupère l'index du bouton à créer pour lui affecter sa "onvalue"
    	checkb=Checkbutton(fen1, text=str(CB), variable=CB, onvalue=int(liste_onvalue[indexCB]), offvalue=0, command=traitement_CB)
    	checkb.grid(row=rowz,column=1,sticky="w",padx=5,pady=3)
    	rowz+=1
    mais ça ne fonctionne pas!
    ça me crée bien les checkbutton mais ils ne sont pas utilisables.
    python me renvoie une erreur me disant que les variables ne sont pas définies.
    je pense que le problème vient du fait que python n'attribut pas les bonnes valeurs à "variable", c'est à dire CB1, CB2 et CB3.
    comment peut-on définir une valeur de variable en variable?
    une idée?

    merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def traitement_CB():
    	print(CB1.get())
    	print(CB2.get())
    	print(CB3.get())
    cela suppose que CB1, CB2 et CB3 sont des variables.

    Mais dans l'écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_CB=('CB1','CB2','CB3')  #liste des checkbutton à créer récupéré de l'xml
    ces CB là ne sont que des chaînes de caractères...

    Le plus simple serait de créer votre propre association "chaine de caractères" => objet via un dict:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    buttons = dict()
    for ix, CB in enumerate(liste_CB):
    	cb = buttons[CB]=Checkbutton(fen1, text=str(CB), variable=CB, onvalue=int(liste_onvalue[ix]), offvalue=0, command=traitement_CB)
    	cb.grid(row=rowz,column=1,sticky="w",padx=5,pady=3)
    	rowz+=1
    et de modifier traitement_CB en conséquence.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci Wiztricks!

    Après quelques modifs, ça marche!

    Si ça peut aider quelqu'un d'autre, voici le code:

    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
     
    from tkinter import *
     
    def traitement_CB(liste):
    	listCB=[]
    	for fg in liste:
    		listCB.append(fg.get())
    	print (listCB)
    #################### Main ######################
    fen1 = Tk()
    fen1.title("checkbutton auto")
     
    liste_CB=['CB1','CB2','CB3','CB4']  #liste des checkbutton à créer récupéré de l'xml
    liste_onvalue=[17,24,100,200]   #liste des onvalue à affecter récupéré de l'xml
    rowz=1
    bouton_value=dict()
    list_var=[]
    v=vars()
    for ix, CB in enumerate(liste_CB):
    	v["CB_%s" %CB]=IntVar()
    	list_var.append(v["CB_%s" %CB])
    	bouton_value[CB]=Checkbutton(fen1, text=str(CB), variable=v["CB_%s" %CB], onvalue=int(liste_onvalue[ix]), offvalue=0, command=lambda:traitement_CB(list_var))
    	bouton_value[CB].grid(row=rowz,column=1,sticky="w",padx=5,pady=3)
    	rowz+=1
     
    fen1.mainloop() # démarrage du réceptionnaire d'événements

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

Discussions similaires

  1. [VB.NET]Création automatique de labels
    Par vylsain dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/04/2006, 16h57
  2. création automatique de fichier html
    Par oclone dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 03/02/2006, 14h53
  3. []Création automatique d'utilisateurs
    Par SaeZ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 27/10/2005, 13h38
  4. Création automatique d'exécutable
    Par bourdon dans le forum Langage
    Réponses: 12
    Dernier message: 13/06/2005, 21h17
  5. création automatique de table avec createdb??
    Par champion dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/09/2004, 09h01

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