Как я могу удалить элементы в окне Tkinter? - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь очистить элементы в окне, не закрывая окно root, только видимые элементы. Пока все удалено, некоторые ярлыки все еще остаются. Я создал кнопку «Закрыть», чтобы удалить элементы. Мой код как показано ниже:

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()

где я могу пойти не так?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Создайте Frame для хранения виджетов, а затем вы можете уничтожить фрейм, чтобы очистить окно:

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()

Группировка виджетов в фрейм упрощает очистку определенной части окна.

0 голосов
/ 22 апреля 2020

Вы создаете метки в al oop, но не сохраняете ссылки на метки, кроме последней myLabel2 / 3. Однако вы можете спросить виджет о его дочерних элементах, а затем уничтожить их всех:

def close():
    for widget in root.winfo_children():
        widget.destroy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...