[英]how can i active a function after i destroy it in python tkinter
我是 python tkinter 的新手,我想用 tkinter 構建一個程序。 我使用 for 循環來控制它生成的數量,我想在銷毀它后構建另一個條目。 它將顯示輸入框,但功能(打印)不起作用
這是警告:_tkinter.TclError: invalid command name ".!frame3.!entry"
這是我的代碼:
import tkinter as tk entry = [] def create_entry(): n = int(create_Number_entry.get()) for i in range(n): Number_label = tk.Label(div3, text = 'Report NO :') Number_label.pack() Number_entry = tk.Entry(div3, width = 20) Number_entry.pack() entry.append(Number_entry) def delete_entry(): for widget in div3.winfo_children(): widget.destroy() def print_entry(): for i in entry: print(i.get()) root = tk.Tk() root.title('GUI test') align_mode = 'nswe' pad = 5 div1 = tk.Frame(root, width=400 , height=400 , bg='white') div2 = tk.Frame(root, width=200 , height=200 , bg='white') div3 = tk.Frame(root, width=200 , height=100 , bg='white') div4 = tk.Frame(root, width=200 , height=100 , bg='white') div1.grid(column=0, row=0, padx=pad, pady=pad, sticky=align_mode) div2.grid(column=1, row=0, padx=pad, pady=pad, sticky=align_mode) div3.grid(column=0, row=1, padx=pad, pady=pad, sticky=align_mode) div4.grid(column=1, row=1, padx=pad, pady=pad, sticky=align_mode) create_Number_label = tk.Label(div1, text = 'How many number you want :') create_Number_label.pack() create_Number_entry = tk.Entry(div1, width = 20) create_Number_entry.pack() button1 = tk.Button(div2, text = "create Number entry", command = create_entry) button1.pack() button2 = tk.Button(div4, text = "delete", command = delete_entry) button2.pack() button3 = tk.Button(div4, text = "print", command = print_entry) button3.pack() root.mainloop()
我堅持了幾天,真的很想有人幫忙
單擊delete
按鈕時,您需要清空entry
列表。
import tkinter as tk
entry = []
def create_entry():
n = int(create_Number_entry.get())
for i in range(n):
Number_label = tk.Label(div3, text = 'Report NO :')
Number_label.pack()
Number_entry = tk.Entry(div3, width = 20)
Number_entry.pack()
entry.append(Number_entry)
def delete_entry():
global entry
for widget in div3.winfo_children():
widget.destroy()
entry = []
def print_entry():
for i in entry:
print(i.get())
root = tk.Tk()
root.title('GUI test')
align_mode = 'nswe'
pad = 5
div1 = tk.Frame(root, width=400 , height=400 , bg='white')
div2 = tk.Frame(root, width=200 , height=200 , bg='white')
div3 = tk.Frame(root, width=200 , height=100 , bg='white')
div4 = tk.Frame(root, width=200 , height=100 , bg='white')
div1.grid(column=0, row=0, padx=pad, pady=pad, sticky=align_mode)
div2.grid(column=1, row=0, padx=pad, pady=pad, sticky=align_mode)
div3.grid(column=0, row=1, padx=pad, pady=pad, sticky=align_mode)
div4.grid(column=1, row=1, padx=pad, pady=pad, sticky=align_mode)
create_Number_label = tk.Label(div1, text = 'How many number you want :')
create_Number_label.pack()
create_Number_entry = tk.Entry(div1, width = 20)
create_Number_entry.pack()
button1 = tk.Button(div2, text = "create Number entry", command = create_entry)
button1.pack()
button2 = tk.Button(div4, text = "delete", command = delete_entry)
button2.pack()
button3 = tk.Button(div4, text = "print", command = print_entry)
button3.pack()
root.mainloop()
當您銷毀條目小部件時,它們將從屏幕上清除。 但是由於您將它們添加到列表中,因此它們的引用仍然存在。
當您嘗試print
功能時,它會從列表中獲取條目,並在銷毀的條目上調用.get
方法,這會給您帶來錯誤。
修復。 銷毀條目時清除列表,這樣,它們在列表中的引用也會被刪除。
def delete_entry():
for widget in div3.winfo_children():
widget.destroy()
entry.clear()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.