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 :

Suppression des références des méthodes liées aux événements d'un widget [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut Suppression des références des méthodes liées aux événements d'un widget
    Salut,

    Je m'arrache les cheveux à essayer de comprendre pourquoi tkinter garde les références des fonctions.ou méthodes qui ont été liées aux event et surtout comment les supprimer de tk.

    Récemment, je me suis aperçu que lorsque je redémarrais une partie ou en effectuais une autre dans mon jeu de bataille navale (exécution du script toujours en cours d'exécution), l'occupation mémoire grimpait d'environ 100ko à chaque nouvelle partie, ce qui est énorme pour une occupation mémoire d'environ 11mo à la base.

    En regardant ce qu'il se passe dans le garbage collector, j'ai pu m'apercevoir que l'instance de l'objet devant être supprimé est toujours là, bon je pensais que j'avais fait une bourde quelque part vu que j'ai un registre qui enregistre et radie des objets, mais normalement pas celui-là, je me suis fourvoyé, et j'ai en fait mal analyser le gc, en fait les méthodes qui sont référencées et empêche la suppression de l"objet sont toutes liées aux méthodes passées aux bind() du widget tkinter et manifestement un unbind ne les déférence pas.

    Et quand même pour bien vérifier que c'est bien ça qui en était la cause, j'ai commenté la partie de mon code contenant les bind et retesté, et là l'objet a bien été supprimé lors du del, et n'existe plus dans le gc.

    Donc, je cherche une solution pour enlever toute références aux méthodes de mon objet de tkinter, je pensais naïvement qu'un unbind le faisait, mais non :/
    Le temps ronge l'amour comme l'acide.

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Bon, ben je viens de trouver, désolé du dérangement

    En fait il faut utiliser deletecommand(), et enregistrer les bind qui retourne l'id de leurs références.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    self.liaisonsEvenements = []
    self.liaisonsEvenements.append(self.widget.bind('<Button-1>', self.methodeX))
    self.liaisonsEvenements.append(self.widget.bind('<Button-3>', self.methodeY))
    Et ajouter une méthode supplémentaire (ou surcharcher le destroy du widget si possible) qui contiendra par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for n in self.widget.bind() :
        self.widget.unbind(n)
    for n in self.liaisonsEvenements :
        self.widget.deletecommand(n)
    Le temps ronge l'amour comme l'acide.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/11/2015, 14h08
  2. Réponses: 1
    Dernier message: 19/07/2013, 18h47
  3. Réponses: 1
    Dernier message: 09/05/2007, 10h57
  4. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

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