python Treeview树形结构点击列头排序
时间: 2024-09-23 09:02:19 浏览: 85
PYQt5 工具导入文件tableiew、treeView(单列、多列)显示
在Python中,`tkinter`库中的`ttk.Treeview`组件非常适合创建树形结构,包括列头排序功能。当你点击列头时,`Treeview`会按照该列的数据进行排序。这里是一个简单的例子:
```python
import tkinter as tk
from tkinter import ttk
# 创建窗口
root = tk.Tk()
root.title("Treeview Sort Example")
# 初始化数据(假设我们有一个字典表示部门和员工)
data = [
{"parent": "Company", "name": "HR", "employees": ["Alice", "Bob"]},
{"parent": "HR", "name": "Manager", "employees": ["Charlie"]},
# ... 更多数据 ...
]
# 定义一个函数来更新排序
def sort_column(column):
data.sort(key=lambda x: x[column])
tree.set_columns(*[col for col in tree.heading()]) # 重置所有列
tree.heading(column, command=lambda _col=column: sort_column(_col)) # 将点击事件绑定回自身列头
# 创建Treeview
tree = ttk.Treeview(root)
tree["columns"] = ("name",) # 假设我们只有一个"名字"列
tree.column("#0", width=100, stretch=tk.NO) # 根节点
tree.column("name", anchor="w") # 列头居左
# 添加行并设置初始数据
for item in data:
tree.insert("", "end", values=(item["name"],), tags=(item["parent"],))
# 设置列头
tree.heading("name", text="Name", command=lambda: sort_column("name")) # 点击排序
# 显示Treeview
tree.pack(fill=tk.BOTH, expand=True)
root.mainloop()
```
在这个例子中,当点击“Name”列头时,`sort_column`函数会被调用,根据名字对数据进行排序。如果你有多个列并且想要支持自定义的排序逻辑,可以在`key`参数中提供更复杂的函数。
阅读全文