[Python] checkbuttons.add()

Résolu
Bonjour
J'ai un (très léger) souci avec la command checkbuttons.add().
Quand je fais ça :
for t in list_param_output :
self.checkbuttons.add(t)
Il me retourne l'erreur suivante:
"ValueError: Component name "S_deemb" must not contain "_"
Comment puis-je passer au travers de cette erreur?
Merci

11 réponses

  1. Modérateur
    Je crois oui, parceque là tu te pose des questions existentielles sur la création de plusieurs checkbox, alors que ça se résoud avec des notions d'algo.
    Et ça t'aidera à résoudre des tas d'autres problèmes (boucle imbriquées, branchements conditionnels, etc.)
    0
    1. Pour tout dire, j'ai jamais vraiment suivi de cours de programmation.
      C'est pour ça qu'il me manque la logique.
      0
  2. Modérateur
    ce que je veux faire, c'est parcourir une liste de paramètres, et ajouter un nouveau checkbutton qui porte le nom de mon nouveau paramètre.

    J'avais compris.

    Le principe est de faire une boucle sur tes paramètres, et de créer un checkbutton pour chaque paramètre.

    self.checkButtonsValues = {}
    parametres = ['ga','bu','zo','meuh']
    
    for parametre in parametres:
        v = Tkinter.IntVar(); 
        checkbox = Tkinter.Checkbutton(parent,text=parametre ,variable=v)
        self.checkButtonsValues[parametre] = v
    


    Ensuite tu peux accéder à la valeur d'un checkbutton:
    print self.checkButtonsValues['zo'].get()


    Tu as suivi des cours d'algorithmie ?
    0
    1. euh non jamais....
      pourquoi, ça serait bien?
      0
  3. Modérateur
    C'est normal: checkbutton n'a pas de méthode add.

    Que veux tu faire exactement ?

    En principe, ajouter le bouton que tu viens de créer à ta liste.

    Donc il faut appliquer la méthode .add sur ta liste, par sur le checkbutton.

    maliste.add(moncheckbutton)

    En l'occurence, pour ajouter un élément à une liste, c'est .append(), pas .add()
    0
    1. Salut seb
      ce que je veux faire, c'est parcourir une liste de paramètres, et ajouter un nouveau checkbutton qui porte le nom de mon nouveau paramètre.
      0
  4. C'est bon merci.
    Le matin c'est toujours un peu dur.....
    0
    1. Salut
      Seb, quand tu dis qu'on peut les créer dynamiquement, ça veut dire quoi?
      Car ce que je faisais moi, c'était qu'à chaque fois que je rencontrais un nouveau paramètre dans ma liste, j'ajoutais un nouvelle "RadioSelect" avec l'option .add() et le nom de mon nouveau paramètre. Mais avec Checkbutton, ça ne marce pas. L'attribut .add() n'est pas supporté par CheckButton.
      0
      1. Modérateur
        Pmw.RadioSelect

        Je ne l'ai jamais utilisé. Il faut regarder la doc pour voir comment il s'utilise.
        0
        1. Modérateur
          Je ne connais pas le nombre de case à cocher

          Pas de problème, tu peux les créer dynamiquement et les stocker dans une liste.

          à quoi correspond le terme "variable = v"?

          Ah pardon, erreur:
          self.valeurCheckbutton = Tkinter.IntVar(); 
          checkbox = Tkinter.Checkbutton(parent,text="Blablabla",variable=self.valeurCheckbutton)
          checkbox.grid(column=0,row=2)
          0
          1. Modérateur
            Ce sont des cases à cocher que tu utilises ?

            mmm... je ne comprend pas bien comment tu construit des cases à cocher.

            Moi je fais comme ça:

            self.valeurCheckbutton = Tkinter.IntVar(); 
            checkbox = Tkinter.Checkbutton(parent,text="Blablabla",variable=v)
            checkbox.grid(column=0,row=2)


            C'est dans le text="Blabla" que je définis le texte qui doit s'afficher à côté de la base à cocher.

            self.valeurCheckbutton me sert à lire l'état de la case (cochée ou pas):

            if self.valeurCheckbutton.get()!=0: print "Case cochée !"
            0
            1. Ben en fait au départ, je ne connais pas le nombre de case à cocher que je dois créer. Il dépend du nombre de paramètres contenus dans "list_param_input".
              Pour chaque paramètre de cette liste, je créé une case à cocher qui porte le nom du paramètre.
              Dans le code que tu m'as donné, à quoi correspond le terme "variable = v"?
              0
            2. En fait je viens de me rendre compte que j'utilisais non pas la fonction Tkinter.Checkbutton, mais Pmw.RadioSelect.
              Et effectivement, la fonction .add() ne s'applique pas aux checkbuttons.
              Y'a une grande différence entre ces deux façons de faire?
              0
          2. Modérateur
            Je vois... le message d'erreur est explicite:
            "Component name "S_deemb" must not contain "_" "

            Autrement dit, tu n'a pas le droit d'utiliser un underscore "_" dans les identifiants de composants.
            0
            1. Ouais je m'en doutais mais je ne peux pas utiliser autre chose ou forcer l'écriture des paramètres, quelque chose comme ça?
              0
          3. Modérateur
            Elle contient quoi comme object ta liste list_param_output ?
            0
            1. Ca dépend du fichier choisi au départ, mais dans ce cas-là :
              ['ic', 'ib', 'S_deemb']
              0