Tkinter从列表循环生成Checkbox 新列表到来时如何更新重建复选框
Tkinter动态切换复选框列表解决方案
要实现新复选框替换旧复选框的效果,核心逻辑是统一存储每次生成的复选框实例,切换列表时先批量销毁旧实例再生成新实例,修改后的可运行代码如下:
import tkinter as tk root = tk.Tk() root.geometry('400x400') my_friends = ['Donald', 'Daisy', 'Uncle Scrooge', 'Ze Carioca'] my_heroes = ['Captain America', 'Hulk', 'Spider Man', 'Black Widow', 'Wanda Maximoff', 'Vision', 'Winter Soldier'] what_list = [] # 存储所有生成的复选框实例 cbox_list = [] # 可选:存储复选框绑定的变量,方便后续获取选中值 cbox_var_list = [] def list_my_friends(): global what_list what_list = my_friends create_cbox() def list_my_heroes(): global what_list what_list = my_heroes create_cbox() def create_cbox(): # 销毁所有旧复选框 for box in cbox_list: box.destroy() # 清空存储旧数据的列表 cbox_list.clear() cbox_var_list.clear() # 生成新的复选框 for item in what_list: current_var = tk.StringVar() current_box = tk.Checkbutton(root, text= item, variable = current_var, onvalue = item, offvalue = '') current_box.pack() # 存入新生成的控件和变量 cbox_list.append(current_box) cbox_var_list.append(current_var) tk.Button(root, text = "my_friends",command=list_my_friends).pack() tk.Button(root, text = "my_heroes",command=list_my_heroes).pack() root.mainloop()
关键修改说明
- 新增
cbox_list全局变量存储所有复选框实例,每次调用create_cbox生成新复选框前,先遍历列表调用每个控件的destroy()方法销毁旧控件,再清空列表 - 新增
cbox_var_list可选存储复选框的绑定变量,后续需要获取选中值时直接遍历该列表即可,无需重复查找控件 - 修正了原代码中导入语法和控件调用前缀不匹配的报错问题
- 简化了按钮
command参数,不需要额外嵌套lambda,直接传入函数名即可
内容的提问来源于stack exchange,提问作者pkanda
相关产品推荐
相关产品推荐

