Tkinter中combobox读取CSV填充出现空值及首项不可见问题求解
问题原因
- 下拉列表包含空值:原代码提取Summary列时没有过滤空字符串,会把CSV里的空单元格内容也加入选项列表
- 第一项内容不可见:原代码同时用了
for row in reader循环和列表推导读取同一个csv reader对象,reader是迭代器,第一个for循环已经读取了第一行数据,后续列表推导只能从第二行开始读取,导致第一行数据丢失
修复后代码
import tkinter as tk import tkinter.ttk as ttk import csv class Application(tk.Frame): def __init__(self, root): self.root = root self.initialize_user_interface() def initialize_user_interface(self): self.button2 = tk.Button(self.root, text="Summary", command=self.summary_data) self.button2.grid(row=0, column=1) def summary_data(self): n = tk.StringVar(value="choose location") summarychoosen = ttk.Combobox(self.root, width = 20, textvariable = n) summarychoosen.grid(row=1, column=1, sticky="wesn") with open('UI_LLD.csv', encoding='utf-8') as f: # 可根据实际文件编码调整参数 reader = csv.DictReader(f, delimiter=',') # 新增非空过滤,移除多余循环 summary_list = [row['Summary'].strip() for row in reader if row['Summary'].strip()] summarychoosen['values'] = summary_list app = Application(tk.Tk()) app.root.mainloop()
修复说明
- 已同步修正原代码中存在的缩进错误,可直接运行
- 移除了多余的
for row in reader循环,避免迭代器提前消耗导致首行数据丢失 - 列表推导中新增
if row['Summary'].strip()判断,自动过滤空单元格、仅保留有效字符串作为选项 - 可选:open方法新增encoding参数指定文件编码,避免读取中文CSV时出现乱码问题
内容的提问来源于stack exchange,提问作者Piu
相关产品推荐
相关产品推荐

