如何用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
相关产品推荐
相关产品推荐

