tkinterで、toplevelを使っていくつか画面を開きたいと思います。
その際、サブ画面を閉じたときにメモリが開放されずに困っております。
main.py
python
1import tkinter as tk 2import sub 3 4def open(event): 5 sub.main() 6 7 8root = tk.Tk() 9root.geometry('900x750') 10 11btn = tk.Button(root, text="開く") 12btn.pack() 13btn.bind("<ButtonRelease-1>", lambda event: open(event)) 14 15root.mainloop()
sub.py
python
1import tkinter as tk 2import tkinter.ttk as ttk 3 4class Treelist(tk.Frame): 5 def __init__(self, root, item): 6 super().__init__(root) 7 self.pack(fill=tk.Y) 8 9 self.tree = ttk.Treeview(self, column=(1), show="", selectmode="browse") 10 self.scrollbar = ttk.Scrollbar(self, command=self.tree.yview) 11 self.tree.configure(yscrollcommand=lambda f, l: self.scrollbar.set(f, l)) 12 self.scrollbar.pack(side="right", fill=tk.Y) 13 self.tree.pack(fill=tk.Y) 14 self.tree.column(1, width=100) 15 for a in item: 16 self.tree.insert("", "end", values=(a)) 17 18def main(): 19 root = tk.Toplevel(name="sub_screen") 20 root.geometry('900x750') 21 root.title("sub") 22 23 item = [x for x in range(1000000)] 24 tree = Treelist(root, item) 25 del item 26 27 root.mainloop() 28 29if __name__ == "__main__": 30 main()
というコードを書いてみたのですが、メイン画面のボタンを押すと、サブ画面が表示されます。
そこでメモリ使用率が急増するのですが、サブ画面を閉じてもメモリがほとんど開放されず、サブ画面を開くたびにメモリがどんどん加算されていきます。
サブ画面のitemはdelしているので、ツリービューに残ったデータが消えずにどんどん加算していってるのだと思います。
サブ画面を閉じたとき(右上の☓ボタンを押したとき)に、メモリを開放するにはどのようにしたらよいでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/20 07:29
2021/02/20 09:18 編集
2021/02/21 01:05