Tkinter导入CSV表格选中行仅显示部分内容的问题求助
Tkinter Treeview获取选中行整列数据解决方案
你当前的代码仅能打印选中行的第一列内容,核心问题是使用了tree.item(item,"text")——这个方法仅返回Treeview隐藏的#0列内容,而实际导入的CSV数据存储在values属性中。以下是修改后的完整代码,可实现获取并存储选中行的所有列数据:
CSV文件内容:
serial_number, Mac_Id 001, 19bc 002, 19bd
from tkinter import * import tkinter.ttk as ttk import csv # 用于存储选中的行数据(全局变量示例) selected_row_data = [] def OnDoubleClick(event): # 获取选中的项 selected_items = tree.selection() if not selected_items: return item = selected_items[0] # 获取该行所有列的数值,返回元组格式 row_values = tree.item(item)['values'] print("选中的整行数据:", row_values) # 存储选中行数据到全局变量 global selected_row_data selected_row_data = row_values # 可选:转换为字典,方便按列名访问 row_dict = dict(zip(["serial_number", "Mac_Id"], row_values)) print("按列名格式化的数据:", row_dict) root = Tk() root.title("Python - 导入CSV到Tkinter表格") width = 500 height = 400 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() x = (screen_width/2) - (width/2) y = (screen_height/2) - (height/2) root.geometry("%dx%d+%d+%d" % (width, height, x, y)) root.resizable(0, 0) TableMargin = Frame(root, width=500) TableMargin.pack(side=TOP) scrollbarx = Scrollbar(TableMargin, orient=HORIZONTAL) scrollbary = Scrollbar(TableMargin, orient=VERTICAL) tree = ttk.Treeview(TableMargin, columns=("Serial number", "Mac Id"), height=400, selectmode="extended", yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set) scrollbary.config(command=tree.yview) scrollbary.pack(side=RIGHT, fill=Y) scrollbarx.config(command=tree.xview) scrollbarx.pack(side=BOTTOM, fill=X) tree.heading('Serial number', text="序列号", anchor=W) tree.heading('Mac Id', text="MAC地址", anchor=W) tree.column('#0', stretch=NO, minwidth=0, width=0) tree.column('#1', stretch=NO, minwidth=0, width=200) tree.column('#2', stretch=NO, minwidth=0, width=200) tree.bind("<<TreeviewSelect>>", OnDoubleClick) tree.pack() with open('data.csv') as f: reader = csv.DictReader(f, delimiter=',') for row in reader: serial_number = row['serial_number'] Mac_Id = row['Mac_Id'] tree.insert("", 0, values=(serial_number, Mac_Id)) if __name__ == '__main__': root.mainloop()
关键修改说明
- 用
tree.item(item)['values']替代tree.item(item,"text"),直接获取该行所有列的数值集合(元组格式)。 - 增加空选中判断,避免无选中项时触发索引错误。
- 提供两种数据存储方式:直接存储元组,或转换为字典以便按列名访问。
内容的提问来源于stack exchange,提问作者ISMAIL MULLA
相关产品推荐
相关产品推荐

