我為一個相當簡單的計算器制作了一個 Tkinter UI,一切正常,我有一個清除按鈕來清除所有輸入框。我寧愿用一行代碼來清除所有 40 多個框而不是 40 多行來單獨清除每個框,并且想知道是否有一個 Tkinter 命令可以ent.delete(0, END)對所有條目執行相同的操作?
uj5u.com熱心網友回復:
這應該足夠了:
[widget.delete(0, tk.END) for widget in root.winfo_children() if isinstance(widget, tk.Entry)]
它使用串列理解來回圈遍歷 root 的所有孩子,.delete()如果孩子是一個Entry
執行:
import tkinter as tk
root = tk.Tk()
root.geometry("300x300")
def create_entries(root, amount):
for _ in range(amount):
tk.Entry(root).pack(pady=2)
def clear():
[widget.delete(0, tk.END) for widget in root.winfo_children() if isinstance(widget, tk.Entry)]
create_entries(root, 5)
clear_btn = tk.Button(root, text="clear", padx=10, command=clear)
clear_btn.pack()
root.mainloop()
注意:
我應該指出這可能不是最佳實踐,但我真的不知道。
它創建了一個串列,但沒有將它分配給任何東西,所以本質上它只是做你想要的
編輯:
如果您想清除每個條目,即使它位于不同的小部件內,也請考慮以下事項。僅當您確定應清除整個應用程式中的每個條目時才使用此選項
def clear(root):
for widget in root.winfo_children():
if not isinstance(widget, tk.Entry):
clear(widget)
elif isinstance(widget, tk.Entry):
widget.delete(0, tk.END)
另請注意,我為此使用了普通的 for 回圈,因為如評論中所述,它更好
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352494.html
上一篇:串列框輸出Python
