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

Python Discussion :

Tkinter, Checkbutton et IntVar


Sujet :

Python

Vue hybride

Invité Tkinter, Checkbutton et IntVar 08/11/2020, 14h36
wiztricks Salut, C'est pareil... 08/11/2020, 15h04
Invité @wiztricks Merci pour ces... 08/11/2020, 16h48
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Tkinter, Checkbutton et IntVar
    Bien le bonjour,

    Une nouvelle question de débutant :
    Pourquoi la variable IntVar() doit être globalisée dans un Checkbutton pour que la case se coche ?
    J'ai passé un temps fou sur ce truc...

    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
    from tkinter import *
     
    root=Tk()
     
    def fen():
    	global vars #Sans ça, ça ne marche !
    	vars=[]
    	for toto in totos:
    		var = IntVar(value=1)
    		vars.append(var)
    		bouton=Checkbutton(root, text="TOTO", variable=var)
    		bouton.grid()
     
    fen()
    root.mainloop()
    J'aurai pu par exemple ne jamais avoir eu besoin de la variable PY_VAR0 créée et ne vouloir qu'une coche sélectionnée ou non ! Mais même les bouton.select() et bouton.toggle() ne fonctionne pas dans le for, pourtant le résultat de la variable est bien reliée au bouton de façon globalisée (enfin je crois, je ne sais plus trop avec tous les tests que j'ai fais, il me semble que ça retourne la valeur si je bind le bouton : event.widget.cget('variable')).

    Merci d'avance pour vos éclairages qualitatifs habituels !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 725
    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 725
    Par défaut
    Salut,

    Citation Envoyé par LeNarvalo Voir le message
    Pourquoi la variable IntVar() doit être globalisée dans un Checkbutton pour que la case se coche ?
    C'est pareil pour les Images/Photoimage/... et ce n'est pas utile pour les widgets.

    Le principal soucis est qu'à chacun de ces objets correspond un objet TK et donc la nécessité d'avoir un couplage "fort" de cet objet avec l'objet Python correspondant histoire de savoir "quand" le détruire.

    A défaut, on risque d'avoir de remplir la mémoire avec des objets inutilisés.

    Côté widget ce soucis est résolu par une construction hiérarchique: tous les widgets ont un parent et si on détruit le parent les fils sont aussi détruits.
    La bibliothèque garde une référence vers la racine (l'instance de Tk) et chaque widget contient un attribut children dans lequel sont gardés les références aux "fils".

    Les images et les variables peuvent être référencées par plusieurs widgets.
    Difficile de tracer leur utilisation pour éventuellement libérer l'objet (TK).

    A l'utilisateur de trouver sa solution.

    note: ce n'est pas vraiment un soucis car dans un monde de "callbacks", si une fonction crée une Variable, elle devra à priori être accessible par une autre fonction. Il faudra bien qu'une variable quelconque permette l'accès à cet objet (ce qui fait une référence).
    Alors que pour les images, une fois affichée, à quoi bon garder une référence? Et on se fait piéger plus souvent.


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

  3. #3
    Invité
    Invité(e)
    Par défaut
    @wiztricks

    Merci pour ces explications !

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

Discussions similaires

  1. liste tkinter.IntVar object
    Par Invité dans le forum Général Python
    Réponses: 9
    Dernier message: 13/08/2020, 09h39
  2. [Python 3.X] Problème avec Checkbutton (Tkinter)
    Par st3ph31 dans le forum Général Python
    Réponses: 5
    Dernier message: 18/07/2014, 14h02
  3. Tkinter, treectrl et checkbutton
    Par frites.saucisse dans le forum Tkinter
    Réponses: 0
    Dernier message: 03/09/2010, 11h55
  4. Réponses: 3
    Dernier message: 26/10/2004, 07h31
  5. Réponses: 3
    Dernier message: 16/08/2004, 10h57

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