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

如何在Tkinter Treeview中添加网格线使其更像表格?

当然可以!Tkinter的Treeview默认确实没有明显的网格线,但我们可以通过ttk样式配置(最简洁推荐的方法)来实现表格化的外观,大幅提升可视化效果和用户友好性。

下面是修改后的完整代码,我会一步步解释关键改动:

from tkinter import *
from tkinter import ttk

myApp = Tk()
myApp.title("Program")
myApp.geometry("800x700")

# 核心:配置ttk样式来添加网格线效果
style = ttk.Style(myApp)
# 配置Treeview主体样式
style.configure("Treeview",
                background="white",
                fieldbackground="white",
                borderwidth=1,
                relief="solid",
                rowheight=25)  # 增大行高,让内容更舒展,视觉更舒适
# 配置表头样式,让表头和内容区的网格线连贯
style.configure("Treeview.Heading",
                background="#f0f0f0",
                relief="solid",
                borderwidth=1)
# 可选:设置选中行的高亮样式,提升交互体验
style.map("Treeview",
          background=[("selected", "#cce5ff")])

tree = ttk.Treeview(myApp, height=25, style="Treeview")
tree['show'] = 'headings'

sb = ttk.Scrollbar(myApp, orient="vertical", command=tree.yview)
sb.grid(row=1, column=1, sticky="NS", pady=5)
tree.configure(yscrollcommand=sb.set)

tree["columns"] = ("1", "2", "3")
# 给每一列添加边框,设置居中对齐,让网格线完整显示
tree.column("1", width=50, anchor="center", stretch=False, borderwidth=1)
tree.column("2", width=50, anchor="center", stretch=False, borderwidth=1)
tree.column("3", width=50, anchor="center", stretch=False, borderwidth=1)

tree.heading("1", text="Col 1")
tree.heading("2", text="Col 2")
tree.heading("3", text="Col 3")

# 添加测试数据,方便你直观查看网格效果
for i in range(10):
    tree.insert("", "end", values=(f"Row {i}-1", f"Row {i}-2", f"Row {i}-3"))

# 优化布局,让Treeview能自适应窗口大小
tree.grid(row=1, column=0, padx=5, pady=5, sticky="NSEW")
myApp.grid_rowconfigure(1, weight=1)
myApp.grid_columnconfigure(0, weight=1)

myApp.mainloop()

关键改动说明:

  • 样式配置:通过ttk.Style给Treeview和表头添加了borderwidth=1和relief="solid",这样就会显示出边框和单元格的分隔线。
  • 列属性设置:给每个列单独设置borderwidth=1,确保列之间的竖线清晰显示;同时设置anchor="center"让内容居中,提升可读性。
  • 交互优化:添加了选中行的高亮样式,用户能一眼看到当前选中的行;增大行高让内容不拥挤,视觉更舒适。
  • 布局优化:设置了窗口的网格权重,让Treeview能随窗口大小自动调整,适配不同屏幕。

如果想要更个性化的网格线(比如自定义颜色、粗细),还可以通过绑定事件手动绘制线条,但上面的方法已经能满足绝大多数表格化需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:38