在我的GUI应用程序中,我有一个“显示/隐藏”切换按钮。默认情况下,按钮文本为“显示”。单击该按钮后,将从预定义的列表中创建许多后续按钮,并且按钮文本将更改为“隐藏”。
当用户单击“隐藏”时,我希望隐藏/删除创建的按钮。我想我需要grid_forget()
在else
条件中使用该函数,但是怎么办呢?
谢谢阅读。
# Toggles between Show/Hide and creates buttons
def toggle_text():
if btn['text'] == 'Show':
btn['text'] = 'Hide'
for i, item in enumerate(some_list):
btn = Button(root, text='%s' % item)
btn.grid(row=6+i, column=0, sticky=W)
else:
btn['text'] = 'Hide'
# Show/Hide button
btn = Button(root, text='Show', command=toggle_text)
btn.grid(row=5, column=0, sticky=W)
您必须创建列表以保留按钮,然后才能使用grid()
和grid_forget()
import tkinter as tk
# --- functions ---
def toggle_text():
global buttons # inform function to use external/global variable
if btn['text'] == 'Show':
btn['text'] = 'Hide'
for i, item in enumerate(some_list, 6):
# don't use name `btn` because you overwrite external `btn`
b = tk.Button(root, text=item)
b.grid(row=i, column=0, sticky='we')
buttons.append(b)
else:
btn['text'] = 'Show'
for b in buttons:
#b.grid_forget()
# better `destroy` because you will create new buttons
# so you can free memory
b.destroy()
# remove all buttons from list
#buttons.clear() # only Python 3 (doesn't need `global buttons`)
#buttons[:] = [] # Python 2 and 3 (doesn't need `global buttons`)
buttons = [] # Python 2 and 3 but needs `global buttons`
# --- main ---
some_list = ['A', 'B', 'C']
buttons = [] # create global variable
root = tk.Tk()
btn = tk.Button(root, text='Show', command=toggle_text)
btn.grid(row=5, column=0, sticky='w')
root.mainloop()
如果您始终具有相同的按钮,则可以创建一次。
import tkinter as tk
# --- functions ---
def toggle_text():
if btn['text'] == 'Show':
btn['text'] = 'Hide'
for i, b in enumerate(buttons, 6):
b.grid(row=i, column=0, sticky='we')
else:
btn['text'] = 'Show'
for b in buttons:
b.grid_forget()
# --- main ---
root = tk.Tk()
some_list = ['A', 'B', 'C']
buttons = [] # create global variable
for item in some_list:
b = tk.Button(root, text=item)
buttons.append(b)
btn = tk.Button(root, text='Show', command=toggle_text)
btn.grid(row=5, column=0, sticky='w')
root.mainloop()
或者您可以使用Frame
分组Buttons
import tkinter as tk
# --- functions ---
def toggle_text():
if btn['text'] == 'Show':
btn['text'] = 'Hide'
frame.grid(row=6, column=0, sticky='we')
else:
btn['text'] = 'Show'
frame.grid_forget()
# --- main ---
root = tk.Tk()
some_list = ['A', 'B', 'C']
frame = tk.Frame(root)
frame.columnconfigure(0, weight=1) # resise column
for i, item in enumerate(some_list):
b = tk.Button(frame, text=item)
b.grid(row=i, column=0, sticky='we')
btn = tk.Button(root, text='Show', command=toggle_text)
btn.grid(row=5, column=0, sticky='w')
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句