Tkinter 数据展示-treeview

        在 Tkinter 中,Treeviewttk 模块提供的一个控件,主要用于显示分层或表格形式的数据。

常用方法

按功能进行分类

1. 节点操作

  • 插入节点

    • insert(parent, index, iid=None, text='', values=())
      • 在指定父节点下插入新节点。
  • 删除节点

    • delete(*items)
      • 删除指定的节点。
  • 移动节点

    • move(item, parent, index)
      • 将节点移动到新的父节点下,指定位置。
  • 节点标识获取

    • item(item_id, option=None)
      • 获取或设置指定节点的信息。

2. 节点属性

  • 获取子节点

    • get_children(item=None)
      • 获取指定节点的直接子节点(如果未指定则返回根节点的子节点)。
  • 设置节点值

    • set(item, column=None, value=None)
      • 设置某节点某列的值,未指定 column 时返回所有列的值。
  • 获取节点文本

    • item(item_id, 'text')
      • 获取节点的显示文本。

3. 选择操作

  • 获取选中节点

    • selection()
      • 返回当前选中的节点 ID 列表。
  • 设置选中节点

    • selection_set(items)
      • 设置指定节点为选中状态。
  • 清除选中节点

    • selection_remove(items)
      • 清除指定节点的选中状态。
  • 清空所有选中

    • selection_clear()
      • 清空所有节点的选中状态。

4. 展开与折叠

  • 展开节点

    • item(item_id, open=True)
      • 展开指定节点。
  • 折叠节点

    • item(item_id, open=False)
      • 折叠指定节点。
  • 检查展开状态

    • item(item_id, 'open')
      • 返回节点是否展开的状态。

5. 列操作

  • 设置列标题

    • heading(column, option, value)
      • 设置列标题及其属性(如文本、排序等)。
  • 列宽设置

    • column(column, option=None, **kw)
      • 设置列的宽度、对齐方式等属性。
  • 获取列列表

    • columns 属性
      • 返回当前表格的所有列名称。

6. 滚动支持

  • 绑定滚动条
    • 通过 yviewxview 方法支持垂直或水平滚动。

7. 事件绑定

  • 绑定事件
    • bind(event, handler)
      • 绑定事件,例如 <ButtonRelease-1><<TreeviewSelect>> 等。

8. 数据更新

  • 刷新显示
    • update()
      • 强制更新 Treeview 的显示。

总结

  • 增删改查数据insert()delete()item()set()
  • 层次结构管理get_children()move()item()
  • 交互操作selection() 系列方法、事件绑定。
  • 可视化调整column()heading()、展开与折叠相关方法。

一个节点就是展示数据的一行,根据iid 唯一识别.iid可以在insert()时指定.也可以通过 iid= treeview.insert 获取. 调用selection()返回的也是iid值.

案例

from tkinter import *
from tkinter.ttk import *

# ---------- 创建窗口 -----------
root = Tk()

screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()

width = int(screenwidth/2)
height = int(screenheight/2)
x = int(screenwidth/4)
y = int(screenheight/4)

place = f"{width}x{height}+{x}+{y}"
root.geometry(place)

# ----------- tv -----------------

# 选择数据
def treeSelect(event):
    widgetobj = event.widget
    itemselect = widgetobj.selection()
    # print(tv.item(itemselect,"values"))
    var.set(tv.item(itemselect,"values"))
    print(tv.set(itemselect,"title"))


# 双击
def doubleclick(event):
    e = event.widget
    print(e.selection())



tv = Treeview(root, selectmode="browse", show="tree headings")
tv["columns"]=("title", "author", "time")

# 表格头
tv.heading("#0", text="折叠")
tv.heading("title", text="书名")
tv.heading("author", text="作者")
tv.heading("time", text="发布时间")

# 格式化列
tv.column("title",anchor=CENTER)
tv.column("author",anchor=CENTER)
tv.column("time",anchor=CENTER)

# 指定/获取iid值
iid = tv.insert("",index=END,iid="x-001",text="上层")

for i in range(50):
    tv.insert(iid, index=END, values=(f"此间鸟兽-{i}", "任", f"2025-{i}"))


# 滚动条
vsb = Scrollbar(root,orient="vertical", command=tv.yview)
hsb = Scrollbar(root,orient="horizontal", command=tv.xview)
vsb.pack(side="right", fill="y")
hsb.pack(side="bottom", fill="x")

tv.configure(xscrollcommand=hsb.set, yscrollcommand=vsb.set)

# 事件绑定
tv.bind("<<TreeviewSelect>>", treeSelect)
tv.bind('<Double-1>', doubleclick)

# 动态获取
var = StringVar()
label = Label(root,textvariable=var)

# 展开折叠
tv.item(iid, open=True)

tv.pack()
label.pack()


# 主循环
root.mainloop()

总结

iid(Item ID)是每个节点(项)的唯一标识符。iid 用于区分和引用不同的节点,通常在添加、修改、删除或查询节点时使用。先通过colums申明计算机识别的列名;再通过heading,设置用户查看的显示文本.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值