昨日、私はこの質問をしました。ループTkinterによる要素の作成で、いくつかの箇条書きを動的に作成する方法を見つけました。クリアボタンを追加して、押すとフォーム全体がリセットされるようにします。リストを[]に戻してみましたが、うまくいきませんでした。
編集-基本的に、リセットを押すと、フォームが読み込まれたときとまったく同じように表示されます。
昨日、私はこの質問をしました。ループTkinterによる要素の作成で、いくつかの箇条書きを動的に作成する方法を見つけました。クリアボタンを追加して、押すとフォーム全体がリセットされるようにします。リストを[]に戻してみましたが、うまくいきませんでした。
編集-基本的に、リセットを押すと、フォームが読み込まれたときとまったく同じように表示されます。
ボタンは次のdestroy
方法で削除されます。
for button in self.button:
button.destroy()
import Tkinter as tk
class ButtonBlock(object):
def __init__(self, master):
self.master = master
self.button = []
self.button_val = tk.IntVar()
entry = tk.Entry()
entry.grid(row=0, column=0)
entry.bind('<Return>', self.onEnter)
entry.focus()
clear_button = tk.Button(master, text='Clear', command=self.onClear)
clear_button.grid(row=0, column=1)
def onClear(self):
for button in self.button:
button.destroy()
def onEnter(self, event):
entry = event.widget
num = int(entry.get())
self.onClear()
for i in range(1, num+1):
self.button.append(tk.Radiobutton(
self.master, text=str(i), variable=self.button_val, value=i,
command=self.onSelect))
self.button[-1].grid(sticky='WENS', row=i, column=0, padx=1, pady=1)
def onSelect(self):
print(self.button_val.get())
if __name__ == '__main__':
root = tk.Tk()
ButtonBlock(root)
root.mainloop()
リストを元に戻す(つまり、を使用する)と、変数self.button = []
に格納されているデータがクリアされます。button
そのアクションだけでは、ユーザーインターフェイス(UI)に接続されません。(メソッドによって)作成されたウィジェットオブジェクトを明示的に削除する必要がありますonEnter
。
したがって、あなたが探しているクリアリング機能は、あなたの前の質問からの答えを拡張することによって実現可能であるはずです。onClear
クラスにメソッドを追加して、「クリア」コントロールが選択されたときに(つまり、ボタンウィジェットを使用して)、ウィジェットがメソッドを呼び出すのと同じように、ButtonBlock
そのコールバック関数が呼び出されるようにします。ButtonBlock.onClear()
Entry
onEnter
編集:この質問に対するunutbuの答えを参照してください。選択すると、clear_button
コントロールはを呼び出しますButtonBlock.onClear()
。forループはonClear
、リストから各ボタンオブジェクトへの参照を取得しbutton
、オブジェクトのdestroy
メソッドを呼び出します。これにより、UIからオブジェクトが削除されます。