Tkinterで、データベースにあるデータを1つUIで選ばせるとします。
画面遷移時とかにデータベースを読み直して表示を更新します。
そのときにdestroy()してからインスタンス生成し直すのがシンプルだと思ったのですが、下記サンプルコードを作ってメモリを見たらウィジェット作り直すごとに消費メモリが少しずつ増えていっているような気がします。
そういう仕様でしょうか?
これに対して、ListboxやTreeviewで代用する以外方法ってありますか?
インスタンスを使い回すのも考えたのですが、データベース内のデータ数が変わったときの非表示処理とかでコードが複雑になりそうな気がしました(placeで配置するような場合など)。
ウィジェット作り直しサンプルコード
(ボタンを押したらラジオボタン作り直す。タスクマネージャー見たら消費メモリどんどん増えていくっぽい)
Python
1import tkinter as tk 2from tkinter import ttk 3 4def create_radiobutton(): 5 global cnt, ivar, rb_li 6 for i in range(30): 7 txt = "Radiobutton" + str(cnt) 8 cnt += 1 9 rb = ttk.Radiobutton(root, text=txt, value=i+1, variable=ivar, command=lambda:print(ivar.get())) 10 rb.grid() 11 rb_li.append(rb) 12 13def on_button(): 14 global rb_li 15 16 for rb in rb_li: 17 rb.destroy() 18 rb = [] 19 20 create_radiobutton() 21 22 23root = tk.Tk() 24 25button = ttk.Button(root, text="Button", command=on_button) 26button.grid() 27 28rb_li = [] 29cnt = 1 30ivar = tk.IntVar() 31 32create_radiobutton() 33 34root.mainloop()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/17 01:29 編集