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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:12:49