Remove/Forget 切换按钮中的按钮
Remove/Forget Buttons in a Toggle Button
在我的 GUI 应用程序中,我有一个 Show/Hide 切换按钮。默认情况下,按钮文本为 "Show"。单击该按钮时,会从预定义列表中创建多个后续按钮,并且按钮文本会更改为 "Hide".
当用户单击 "Hide" 我希望 hide/remove 已创建的按钮。我想我需要在 else
条件下使用 grid_forget()
函数,但怎么会这样呢?
感谢阅读。
# 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()
在我的 GUI 应用程序中,我有一个 Show/Hide 切换按钮。默认情况下,按钮文本为 "Show"。单击该按钮时,会从预定义列表中创建多个后续按钮,并且按钮文本会更改为 "Hide".
当用户单击 "Hide" 我希望 hide/remove 已创建的按钮。我想我需要在 else
条件下使用 grid_forget()
函数,但怎么会这样呢?
感谢阅读。
# 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()