tkinter 切换按钮框架没有阻碍?

tkinter Toggle button frame not hinding?

我想用 tkinter 制作一个框架切换按钮。但是我的代码似乎无法正常运行,这就是我的意思,我的代码似乎正在添加一个框架,但由于某种原因它没有删除该框架。

我的代码:

import tkinter as tk

def toggle():
    if toggle_btn.config('text')[-1] == 'add frame':
        x = tk.Frame(Tk,width=5,height=4,bg='black')
        x.pack()
        
    else:
        print('the frame is turned off')
        x.pack_forget()

Tk = tk.Tk()

toggle_btn = tk.Button(text="add frame", width=12, command=toggle)
toggle_btn.pack()

Tk.mainloop()

首先,由于行 if toggle_btn.config('text')[-1] == 'add frame': 检查按钮的文本是否为“Add Frame”并且您没有更改按钮文本,所以语句的 else 部分永远不会 运行.这可以通过更改 if 语句中按钮的文本来解决。例如

 if toggle_btn.config('text')[-1] == 'add frame':
    x = tk.Frame(Tk,width=5,height=4,bg='black')
    toggle_btn.config(text='Delete Frame') #Changes the button text to 'Delete Frame'
    x.pack()

接下来,else语句中的x没有定义,所以会报错。您可以简单地通过在函数外部定义 x 来解决这个问题,在 Tk = tk.Tk() 下,然后像这样将其设置为切换函数内的全局变量。

 def toggle():
    global x
    if toggle_btn.config('text')[-1] == 'add frame':
      toggle_btn.config(text='Delete Frame') 
      x.pack()
    
    else:
      print('the frame is turned off')
      x.pack_forget()

 Tk = tk.Tk()
 x = tk.Frame(Tk,width=5,height=4,bg='black')
 ...

最后,当帧被删除时,您想将标签改回 'add frame'。

import tkinter as tk
def toggle():
    global x
    if toggle_btn.config('text')[-1] == 'add frame':
        toggle_btn.config(text='Delete Frame')
        x.pack()
        
    else:
        print('the frame is turned off')
        toggle_btn.config(text='add frame')
        x.pack_forget()

Tk = tk.Tk()
x = tk.Frame(Tk,width=5,height=4,bg='black')

toggle_btn = tk.Button(text="add frame", width=12, command=toggle)
toggle_btn.pack()

Tk.mainloop()