Python Tkinter:如何获取对应Excel工作表的任意数量复选框状态?
问题解决:动态创建复选框并获取状态
你的错误根源有两个:
vardict['var '+str(i)]=IntVar这里存的是IntVar类,不是实例,必须改成IntVar()才能生成可绑定的变量对象selector函数里循环的是vardict的键(字符串类型),自然没有get()方法,要遍历字典里的IntVar实例
下面是修正后的代码,直接用工作表名作为字典键,逻辑更清晰:
import openpyxl from tkinter import * from tkinter import ttk root = Tk() root.configure(background='black') style = ttk.Style() style.theme_use('clam') # 存储每个工作表对应的IntVar,键是工作表名 sheet_vars = {} def selector(): # 遍历字典,打印每个工作表的选中状态 for sheet_name, var in sheet_vars.items(): print(f"工作表 {sheet_name}: {'选中' if var.get() else '未选中'}") wb = openpyxl.load_workbook('Python Test.xlsx') def choose_sheets(workbook): w = Frame(root, background='black') w.pack() # 遍历所有工作表,创建复选框和对应的IntVar for sheet_name in workbook.sheetnames: var = IntVar() sheet_vars[sheet_name] = var # 创建复选框,绑定变量 cb = Checkbutton( w, text=sheet_name, background='black', foreground='white', activebackground='black', activeforeground='white', selectcolor='gray', command=selector, offvalue=0, onvalue=1, variable=var ) cb.pack() # 调用函数创建复选框 choose_sheets(wb) root.mainloop()
关键改进点:
- 用
sheet_vars字典直接关联工作表名和对应的IntVar实例,无需用数字编号,后续处理工作表时更直观 - 每个复选框绑定的是
IntVar()实例,而不是类本身 selector函数通过遍历字典的键值对,直接获取每个工作表的选中状态
运行这段代码后,点击复选框就能在控制台看到对应工作表的选中状态了。
内容的提问来源于stack exchange,提问作者9389320110
相关产品推荐
相关产品推荐

