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

如何基于DataFrame列数动态调整Tkinter Treeview的列数?

动态调整Treeview列数以匹配DataFrame列数

嗨,这问题我熟!要让Tkinter Treeview的列数跟着你的DataFrame动态变化,只需要对代码做几处小修改就行,核心就是用DataFrame的列数来生成Treeview的配置,而不是写死固定值。

修改后的完整代码

import tkinter as tk
from tkinter import ttk
import pandas as pd

# 这里假设你已经有了目标DataFrame df,比如测试用示例:
# df = pd.DataFrame({'Account': ['A1', 'A2'], 'Type1': ['T1', 'T2'], 'Type2': ['X1', 'X2']})

root = tk.Tk()
root.minsize(width=600, height=700)
root.title('New Data')
root.geometry('650x500')

tree = ttk.Treeview(root, selectmode='browse', height='20')
tree.place(x=330, y=45)

vsb = ttk.Scrollbar(root, orient="vertical", command=tree.yview)
vsb.place(x=320, y=45, height=380)  # 调整高度和Treeview匹配
tree.configure(yscrollcommand=vsb.set)

# 关键修改1:根据df列数动态生成columns元组
tree["columns"] = tuple(range(1, len(df.columns) + 1))
tree['show'] = 'headings'

# 关键修改2:动态设置每一列的宽度和表头
# 第一列保留你原来的宽150配置,表头用df的真实列名
if len(df.columns) >= 1:
    tree.column(1, width=150, anchor='c')
    tree.heading(1, text=df.columns[0])

# 剩余列按你的需求设置宽100,表头同步df的列名
for i in range(2, len(df.columns) + 1):
    tree.column(i, width=100, anchor='c')
    tree.heading(i, text=df.columns[i-1])

# 关键修改3:正确插入DataFrame的行数据(原代码遍历的是列名,这里修正为遍历行)
for _, row in df.iterrows():
    tree.insert('', 'end', values=tuple(row))

# root.resizable(False,False)
root.mainloop()

关键修改点说明

  • 动态生成列标识:用tuple(range(1, len(df.columns)+1))自动生成对应列数的数字标识,不管df是3列还是12列,都能完美匹配。
  • 动态配置表头与列宽:把循环范围改成基于df列数的动态范围,同时直接用df.columns里的真实列名作为表头,比固定写"Type"更贴合实际数据。
  • 修正数据插入逻辑:原代码的for i in df实际是遍历DataFrame的列名,而非行数据,改成for _, row in df.iterrows()才能正确将每一行数据插入Treeview。

这样不管你的df有多少列,Treeview都会自动调整列数,完全不用手动修改固定的列数啦!

内容的提问来源于stack exchange,提问作者user13412850

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:37:37