簡體   English   中英

在 python tkinter 中銷毀函數后如何激活它

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM