You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Tkinter:如何获取对应Excel工作表的任意数量复选框状态?

问题解决:动态创建复选框并获取状态

你的错误根源有两个:

  1. vardict['var '+str(i)]=IntVar 这里存的是IntVar类,不是实例,必须改成IntVar()才能生成可绑定的变量对象
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:33:52