簡體   English   中英

如何刪除 Tkinter window 上的項目?

[英]How can I remove items on a Tkinter window?

我正在嘗試清除 window 上的項目而不關閉根 window 只是可見的項目。雖然所有內容都被刪除了一些標簽仍然留下。我創建了一個“關閉”按鈕來刪除項目。我的代碼如下;

from tkinter import*
root = Tk()
root.geometry("480x480")
# Node
myLabel1 = Label(root, text=f'Node')
myLabel1.grid(row=0, column=0)
rows = []  # show the input entry boxes
for i in range(6):
    # name
    entry = Entry(root, width=5, bd=5)
    entry.grid(row=2+i, column=0)
    # x
    myLabel2 = Label(root, text=f'x{i}')
    myLabel2.grid(row=2+i, column=1)
    entry_x = Entry(root, width=5, bd=5)
    entry_x.grid(row=2+i, column=2)
    # y
    myLabel3 = Label(root, text=f'y{i}')
    myLabel3.grid(row=2+i, column=3)
    entry_y = Entry(root, width=5, bd=5)
    entry_y.grid(row=2+i, column=4)
    # save current input row
    rows.append((entry, entry_x, entry_y))
def close():
    for name,ex,ey in rows:
        name.destroy()
        ex.destroy()
        ey.destroy()
    myLabel3.destroy()
    myLabel2.destroy()
    myLabel1.destroy()
    myButton_close.destroy()
myButton_close = Button(root, text="close",padx = 10,pady = 10, command=close)
myButton_close.grid(row=8, column=6)
root.mainloop()

我哪里出錯了?

創建一個Frame來保存小部件,然后您可以銷毀該框架以清除 window:

from tkinter import *

root = Tk()
root.geometry("480x480")

frame = Frame(root)
frame.pack(fill=BOTH, expand=1)

# Node
myLabel1 = Label(frame, text=f'Node')
myLabel1.grid(row=0, column=0)
rows = []  # store the input entry boxes
for i in range(6):
    # name
    entry = Entry(frame, width=5, bd=5)
    entry.grid(row=2+i, column=0)
    # x
    myLabel2 = Label(frame, text=f'x{i}')
    myLabel2.grid(row=2+i, column=1)
    entry_x = Entry(frame, width=5, bd=5)
    entry_x.grid(row=2+i, column=2)
    # y
    myLabel3 = Label(frame, text=f'y{i}')
    myLabel3.grid(row=2+i, column=3)
    entry_y = Entry(frame, width=5, bd=5)
    entry_y.grid(row=2+i, column=4)
    # save current input row
    rows.append((entry, entry_x, entry_y))

def close():
    frame.destroy()

myButton_close = Button(frame, text="close", padx=10, pady=10, command=close)
myButton_close.grid(row=8, column=6)

root.mainloop()

將小部件分組到一個框架中可以更輕松地清除 window 的某些部分。

您在循環中創建標簽,但除了最后一個 myLabel2/3 之外,您沒有保存對標簽的任何引用。 但是,您可以詢問小部件有關其子級的信息,然后將它們全部銷毀:

def close():
    for widget in root.winfo_children():
        widget.destroy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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