导入CSV内容到ttk.Combobox后多词条目带花括号如何解决
问题成因
ttk.Combobox的values参数需要接收一维字符串列表,你通过csv.reader读取得到的data是二维嵌套列表结构,每个元素是对应CSV单行内容组成的子列表,而Tkinter底层基于Tcl语言实现,Tcl在解析嵌套列表中带空格的字符串时,会自动添加花括号标识其为单个列表元素,最终导致下拉框显示时出现花括号包裹的异常效果。
解决方案
将读取到的二维嵌套列表展平为一维字符串列表即可解决该问题,修改后的参考代码如下:
import tkinter as tk from tkinter import ttk import csv owner_var = tk.StringVar() data = [] with open('C:/Users/Me/Desktop/Test/Sample.csv', encoding='utf-8-sig') as csv_file: csv_reader = csv.reader(csv_file) for row in csv_reader: if row: # 过滤空行 data.append(row[0]) # 直接提取每行第一列内容存入一维列表 # 注意不要链式调用place方法,否则owner_drop_down会被赋值为None导致后续无法操作该控件 owner_drop_down = ttk.Combobox(master, state='readonly', values=data, textvariable=owner_var, font="Verdana 12") owner_drop_down.place(x=750, y=300, height=30, width=280)
如果已经生成了原有的嵌套列表,也可以直接通过列表推导式快速展平:
# data为你原有代码中读取得到的原始嵌套列表 flat_data = [row[0] for row in data if row] owner_drop_down = ttk.Combobox(master, state='readonly', values=flat_data, textvariable=owner_var, font="Verdana 12")
内容的提问来源于stack exchange,提问作者GRIDSNAP
相关产品推荐
相关产品推荐

