2 votes

La référence du cadre de Python 3.7 Tkinter ne cesse d'augmenter

Mes excuses, je suis assez nouveau dans ce domaine...

Je ne parviens pas à "écraser" mon cadre tkinter. J'ai écrit ceci pour démontrer mon problème :

from tkinter import *

bgCol = 'red'

def destroyMasterFrame():
    global master
    master.destroy()
    createMasterFrame()

def createMasterFrame():
    global master, bgCol

    if bgCol == 'green':
        bgCol = 'red'
    else:
        bgCol='green'

    master = Frame(root, bg=bgCol)
    master.bind("<Button-1>", lambda event: destroyMasterFrame())
    master.pack(side='top', fill='both', expand='yes')
    print(master)

root = Tk()
root.geometry('200x200+100+100')

createMasterFrame()

root.mainloop()

Donc, à chaque fois que je clique sur le carré de couleur, je pensais que je détruisais le cadre et que je recommençais, mais print(master) me donne...

.!frame
.!frame2
.!frame3
.!frame4
.!frame5

...à chaque fois que je clique. Je sais que j'ai probablement raté quelque chose de fondamental, mais toute aide serait la bienvenue. Merci.

Editar:

Si j'ajoute une image au cadre que je suis en train de détruire, il semble la conserver, ainsi que la référence du cadre, dans la mémoire, ce qui semble remplir rapidement la mémoire en cas d'utilisation répétée. Ce code démontre ce que je veux dire... Comment détruire le cadre, sa référence, et effacer de la mémoire tout ce qu'il contient ?...

from tkinter import *

def destroyMasterFrame():
    global master
    master.destroy()
    createMasterFrame()

def createMasterFrame():
    global master

    master = Frame(root, bg='green')
    master.pack(side='top', fill='both', expand='yes')

    img = PhotoImage(file='test.png')
    label = Label(master, image=img)
    label.image = img
    label.bind("<Button-1>", lambda event: test())
    label.pack(side='top', fill='both', expand='yes')

    print(master)

def test():
    global myrange
    myrange = 1000
    for x in range(myrange):
        createMasterFrame()
        destroyMasterFrame()

root = Tk()
root.geometry('200x200+100+100')

createMasterFrame()

root.mainloop()

Merci encore pour votre aide !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X