Bonjour,
Je suis en train de développer une application utilisant Tkinter pour afficher divers articles dans une fenêtre.
Chaque article est affiché à l'aide d'un label et d'une image par exemple.
En fait j'ai une liste myElems dans laquelle je place tous ce que je vais devoir afficher.
Par exemple myElems = [MyLabel, MyButtonImage, MyLabel2, MyButtonImage2...]
Sachant que MyLabel étends par exemple la classe Tkinter.Label...
Bref, ensuite je passe cette liste à une classe "Agenceur" qui dispose correctement tous mes éléments dans un frame (par exemple, je peux préciser combien je veux d'élement par colone et par ligne... je peux changer la couleur d'une ligne sur deux, etc...).
Bref !
Lorsque que de grosse modification sont réalisés quelque part, je recharge entièrement tous les articles.
Pour cela, je fais d'abord un del myElems [:]
Mais je n'ai pas le sentiment que la mémoire est vraiment relachée ! Car au bout d'un moment, très rapide, mon application plante pour cause qu'elle "ne peut pas allouer de mémoire pour bitmap".
J'ai donc surchargé les fonction __del__ de ma classe MaLabel dans laquelle je mets juste un print pour voir si je passais bien dedans.
Et je n'y passe pas en cours d'application. Si je ferme mon application avant qu'elle ne plante pour cause d'espace mémoire insuffisant, alors j'ai bien mes print qui sont réalisés.
Venant du C++, j'ai du mal à comprendre quand le garbage collector fait son travail, si il est possible de le forcer à réaliser une libération d'espace mémoire immédiate...
Ensuite, je souhaiterais savoir si lorsque l'on vide une liste, elle supprime automatiquement tous ces objets. Par exemple, si on les a passé avant à une autre liste, il ne devrait pas le faire ?
Comment se passe exactement les transferts d'un objet dans une autre liste.
Est ce une copie réelle ou alors il pointe vers la même référence ??
Merci de m'éclairer sur ces points si c'est possible ...
Par exemple, j'ai fait un simple text dans mon main :
et c'est tout et je ne passe pas dans ma fonction del puisque rien n'est affiché... ???!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 root = Tkinter.Tk() label = MyLabel(root) del label
Partager