删除/忘记切换按钮中的按钮

天体11

在我的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章