在尝试学习一些基本的Python和TKinter方面,我是一个新手。
我已经编写了一些简单的代码来创建和填充按钮上的第二个框架,但是用完后无法删除该框架。如果我使用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()
答案 0 :(得分:1)
使用grid
geometry manager而不是pack
添加了框架:
edit_frame.grid(row=3,rowspan=7, column=2)
...因此,根据我们的需要,必须使用grid_remove()
方法或grid_forget()
来删除它:
try:
frame_name.grid_remove()
print('destroyed')