Partage
  • Partager sur Facebook
  • Partager sur Twitter

StringVar

Définition des variables

Sujet résolu
    26 décembre 2016 à 16:17:59

    Bonjour à tous,

    Je suis occupé à écrire un programme qui demande des champs de type "textvariable".

    Chacune des variable assujetties à 'textvariable' serait, par facilité de programme, du genre 'variable[i]=...". De ce fait, il faudrait définir les variables comme ceci :

    for i in range(0, 18, 1):
           Variable[i] = StringVar(value="")

    Mais cela ne fonctionne pas ...

    Comment pourrais-je procéder ?

    Merci.

    Python 3.5.2

    Geoffroy

    • Partager sur Facebook
    • Partager sur Twitter
      26 décembre 2016 à 16:28:28

      Salut,

      La notation avec les crochets et une manière de dire: accède au i ème élément de la liste est assigne lui la valeur ... ce que tu donnes derrière le signe =. Mais il faudrait que ta liste ait déjà cette longueur. Hors ce n'est pas ton cas.

      Toi tu veux créer une liste dans laquelle tu vas ajouter au fur et à mesure une référence vers un StringVar. Pour ajouter un élément à une liste, on utilise la méthode append des listes.

      valeurs = [] # création d'une liste vide
      for i in range(18):
             valeurs.append(StringVar(value="")) # Ajout de la référence de StringVar à la liste valeurs
      

      -
      Edité par Dan737 26 décembre 2016 à 16:28:51

      • Partager sur Facebook
      • Partager sur Twitter
        26 décembre 2016 à 16:40:53

        Bonjour Dan,

        J'ai bien compris ton point de vue. Mais cela ne fonctionne pas, il me retourne l'erreur suivante :

        Traceback (most recent call last):
          File "/media/geoffroy/ON6GMT1/QSLLog/V0.1/QSLLog.py", line 600, in <module>
            initialise = init()
          File "/media/geoffroy/ON6GMT1/QSLLog/V0.1/QSLLog.py", line 593, in init
            Label.append(StringVar(value=""))
          File "/usr/lib/python3.5/tkinter/__init__.py", line 332, in __init__
            Variable.__init__(self, master, value, name)
          File "/usr/lib/python3.5/tkinter/__init__.py", line 236, in __init__
            self._root = master._root()
        AttributeError: 'NoneType' object has no attribute '_root'

        J'ai bien créer ma liste 'Label = []', puis fait un 'append" sur ma liste, mais apparemment, il n'en veut pas ...

        Geoffroy

        • Partager sur Facebook
        • Partager sur Twitter
          26 décembre 2016 à 16:50:46

          Bonjour,

          Ce n'est pas lié au append mais à la classe StringVar. Pour instancier un tel objet, il faut au minimum qu'un contexte existe (tkinter.Tk). Crée donc ta fenêtre avant de créer ce StringVar, et tout ira bien.

          (tkinter pourrait tout de même fournir des erreurs plus explicites)

          • Partager sur Facebook
          • Partager sur Twitter
            26 décembre 2016 à 17:06:00

            Bonjour entwanne,

            Ok, j'ai bien compris mon erreur : en fait, je définissais mes différents "def ...", dont "def init():", dans lequel je définissais notamment mes StringVar, mais la fonction était appelée AVANT mon tkinter.Tk().

            Maintenant, je l'ai changer de place : j'appelle la fonction APRES la définition de ma fenêtre, et ça fonctionne.

            Merci à vous pour ce petit coup de main, et bonnes fêtes !

            Geoffroy

            • Partager sur Facebook
            • Partager sur Twitter

            StringVar

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown