[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 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
      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
    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
      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
    4. Modérateur
      Pmw.RadioSelect

      Je ne l'ai jamais utilisé. Il faut regarder la doc pour voir comment il s'utilise.
      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. C'est bon merci.
          Le matin c'est toujours un peu dur.....
          0
          1. 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
          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
            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