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

如何从Tkinter的Menubutton复选按钮组件中获取选中值

Tkinter复选框菜单选中值获取方案

你当前的代码存在几个问题导致无法正确获取选中的复选框值,下面是修正后的实现方案:

原代码核心问题分析

  • command=get_checked("Sun")会在程序初始化时立即执行函数,而非点击复选框时触发,需要用lambda延迟执行并传递参数(不过更简洁的方式是在点击Ok按钮时统一收集选中项)
  • 原逻辑在点击复选框时维护列表,容易出现重复添加、取消选中后未移除的问题,可靠性不足

修正后的完整代码

from tkinter import *

top = Tk()

# 创建Menubutton和菜单容器
mb = Menubutton(top, text="CheckComboBox", relief=RAISED)
mb.grid()
mb.menu = Menu(mb, tearoff=0)
mb["menu"] = mb.menu

# 统一管理所有选项的标签和状态变量
options = [
    ("Sun", StringVar()),
    ("Mon", StringVar()),
    ("Tue", StringVar()),  # 修正原拼写错误:Teu -> Tue
    ("Wed", StringVar()),
    ("Fri", StringVar())
]

# 批量添加复选框到菜单
for label, var in options:
    mb.menu.add_checkbutton(label=label, variable=var, onvalue="1", offvalue="0")

# 点击Ok按钮时收集所有选中项
def get_selected_items():
    selected_list = []
    for label, var in options:
        if var.get() == "1":
            selected_list.append(label)
    print("选中的选项:", selected_list)
    # 此处可对selected_list进行后续业务处理

# 创建确认按钮
Button22 = Button(top, text='Ok', fg='white', command=get_selected_items, bg='gray', width=15)
Button22.pack()

top.mainloop()

关键修改说明

  1. 统一选项管理:将每个选项的标签和对应的状态变量存入列表,避免单独定义多个变量,代码更简洁易维护
  2. 调整收集时机:不在复选框点击时维护列表,改为点击Ok按钮时统一遍历所有选项的状态,逻辑更清晰可靠
  3. 明确状态值:显式指定复选框的onvalue和offvalue,避免默认值带来的歧义
  4. 修正拼写错误:将原代码中的"Teu"修正为正确的"Tue"

内容的提问来源于stack exchange,提问作者AB1506

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:50:23