每次单击按钮时创建新的复选框,并删除先前添加的复选框



我试图根据按钮单击生成复选框。但当它被点击复选框继续添加。相反,我需要删除先前创建的复选框并再次创建2个复选框。如何删除较早创建的复选框而不是继续增加复选框?以下是我的编码。

# Import Tkinter library
from tkinter import *
# Create an instance of tkinter frame
win = Tk()
# Set the geometry of Tkinter frame
win.geometry("700x250")
# Define Function to print the input value
def display_input():
print("Input for Python:", var1.get())
print("Input for C++:", var2.get())

# Define empty variables
var1 = IntVar()
var2 = IntVar()
display_button_check = Button(win,
text = 'OOOOOOOOOOOOOOOOOO',
font = ('Arial', 11),
height = 1,
width =20,
bg = '#B0E0E6',
fg = 'Black',
command = lambda: get_checkbox_status()
).pack()
def get_checkbox_status():
# Define a Checkbox
t1 = Checkbutton(win, text="Python", variable=var1, onvalue=1, offvalue=0, command=display_input)
t1.pack()
t2 = Checkbutton(win, text="C++", variable=var2, onvalue=1, offvalue=0, command=display_input)
t2.pack()

win.mainloop()

解决方案

在这种情况下,您必须使复选框成为全局变量。您也可以将它们添加到列表中。

...
t1 = Checkbutton(win, text="Python", variable=var1, onvalue=1, offvalue=0, command=display_input)
t2 = Checkbutton(win, text="C++", variable=var2, onvalue=1, offvalue=0, command=display_input)
def get_checkbox_status():
t1.pack()
t2.pack()
...

如果您试图删除已经打包的复选框,您可以使用destroy()方法。请注意,这将完全删除小部件。

...
t1 = Checkbutton(win, text="Python", variable=var1, onvalue=1, offvalue=0, command=display_input)
t2 = Checkbutton(win, text="C++", variable=var2, onvalue=1, offvalue=0, command=display_input)
t1.pack()
t2.pack()
def get_checkbox_status():
t1.destroy()
t2.destroy()
...

如果你只是想隐藏复选框,你可以在这种情况下使用pack_forget()

...
def get_checkbox_status():
t1.pack_forget()
t2.pack_forget()
...

如果你想创建一个可切换的设置,你可以这样做:

...
t1 = Checkbutton(win, text="Python", variable=var1, onvalue=1, offvalue=0, command=display_input)
t2 = Checkbutton(win, text="C++", variable=var2, onvalue=1, offvalue=0, command=display_input)
t1.pack()
t2.pack()
active = True
def get_checkbox_status():
global active
if active:
t1.pack_forget()
t2.pack_forget()
else:
t1.pack()
t2.pack()
active = not active
...

最新更新