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

如何用Python 3.6.5的Tkinter获取并保存复选框名称至列表

解决Tkinter复选框收集选中文件名并关闭窗口的问题

我帮你调整了代码,现在点击"Register checked files names in list lr and close tk"按钮时,会把选中的文件名存入lr列表,然后关闭窗口,控制台也能正确打印出选中的文件。

import speech_recognition as sr
import playsound
import os
import glob
import unidecode
import pickle
import random
import tkinter
from tkinter.constants import *

# 获取目录下的文件并处理编码
ldv = os.listdir("D:/FFOutput/")
ldv1 = [unidecode.unidecode(file) for file in ldv]
print(ldv1)

root = tkinter.Tk()
frame = tkinter.Frame(root, relief=RIDGE, borderwidth=10)
frame.pack(fill=BOTH, expand=1)

label = tkinter.Label(frame, text="choose file(s)")
label.pack(fill=X, expand=1)

# 用字典存储每个复选框的状态变量,键是文件名,值是IntVar
checkbox_vars = {}
for filename in ldv1:
    var = tkinter.IntVar()
    checkbox = tkinter.Checkbutton(root, text=filename, variable=var)
    checkbox.pack()
    checkbox_vars[filename] = var

lr = []

def collect_and_close():
    # 遍历字典,收集选中的文件名
    global lr
    lr = [filename for filename, var in checkbox_vars.items() if var.get() == 1]
    print(lr)  # 实时打印选中结果
    root.destroy()

buttonregister = tkinter.Button(root, text="Register checked files names in list lr and close tk", command=collect_and_close)
buttonregister.pack(side=BOTTOM)

button = tkinter.Button(frame, text="Exit", command=root.destroy)
button.pack(side=BOTTOM)

root.mainloop()

# 窗口关闭后再次打印,确认最终结果
print("最终选中的文件列表:", lr)

主要修改说明:

  • 用字典管理复选框状态:创建checkbox_vars字典,把每个文件名对应的IntVar状态变量存起来,这样能轻松检查哪些复选框被选中。
  • 修复复选框的command问题:原代码里command=print(ldv1[a])会在创建复选框时就执行print,而非点击时触发。现在我们不需要给复选框单独加command,而是在注册按钮的回调里统一收集选中状态。
  • 新增回调函数collect_and_close:这个函数会遍历所有复选框的状态,筛选出选中的文件名存入lr,然后销毁窗口完成操作。
  • 调整按钮顺序:把Exit按钮放在注册按钮之后,逻辑上更符合"先注册再退出"的操作流程。

这样修改后,点击注册按钮就能得到你想要的结果,比如控制台会输出['alors soyez pret.mp3', "c'est bien.mp3"]这类选中的文件列表。

内容的提问来源于stack exchange,提问作者Rémi Descamps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:44:18