Не могу удалить дополнительный кадр в Python - PullRequest
0 голосов
/ 26 августа 2018

Я очень новичок в попытке выучить немного базовых Python и TKinter.

Я написал некоторый простой код для создания и заполнения 2-го кадра при нажатии кнопки, но я не могу удалить фрейм, когда я закончу с ним. Я могу удалить рамку, если я использую command=edit_frame.destroy, но я хочу также выполнить некоторые другие действия по очистке, и поэтому я пытаюсь использовать для нее функцию.

Это мой код:

import tkinter as tk

root = tk.Tk()
root.title('Frames test')
root.geometry('490x310')

def edit_end(frame_name,items):
# do other clean up stuff    
    btn_edit_items.config(state="normal")
    items.delete(0, 'end')
    try:
        frame_name.pack.forget
        print('destroyed')
    except:
        print('something not right')

def edit_items():
    btn_edit_items.config(state="disabled")

    edit_frame = tk.Frame(root,bg="green")
    edit_frame.grid(row=3,rowspan=7, column=2)
    edit_frame.tkraise()

    ef_items = tk.Listbox(edit_frame)
    ef_items.grid(row=2,rowspan=7, column=1, padx=10, pady=2)

    ef_items.insert('end', 'Item 2')
    btn_remove = tk.Button(edit_frame, text='Remove', bg='white', command=lambda: edit_end(edit_frame,ef_items))
    btn_remove.grid(row=0,column=1)


btn_edit_items = tk.Button(root, text='Edit', bg='white', command=edit_items)
btn_edit_items.grid(row=8,column=0, sticky='EW', padx=10, pady=2)

btn_exit = tk.Button(root, text='Exit', bg='white', command=exit)
btn_exit.grid(row=9,column=0)

list_frame = tk.Frame(root, bg="red")
list_frame.grid(row=4,rowspan=7,column=1)

lb_items = tk.Listbox(list_frame)
lb_items.grid(row=2,rowspan=7, column=1, padx=10, pady=2)
lb_items.insert('end', 'Item one')

# Start the main events loop
root.mainloop()

1 Ответ

0 голосов
/ 26 августа 2018

Кадр был добавлен с помощью grid менеджера геометрии , а не pack:

edit_frame.grid(row=3,rowspan=7, column=2)

... Следовательно, grid_remove() метод - или grid_forget(), в зависимости от наших потребностей - должен быть использован для его удаления:

try:
    frame_name.grid_remove()
    print('destroyed')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...