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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:00:01