tkinter树形结构,两个节点,点击列头,分别对每个节点的那一列进行排序,举例
时间: 2024-09-23 15:02:24 浏览: 11
Tkinter树形结构通常用于构建图形用户界面中的树状数据展示,例如文件系统、组织架构等。如果你想要实现在列头上点击进行排序的功能,你可以使用`ttk.Treeview`控件配合`bind`方法来实现。以下是一个简单的例子:
```python
import tkinter as tk
from tkinter import ttk
# 创建主窗口
root = tk.Tk()
# 定义树的数据
data = [
{"name": "节点1", "value": [5, 7, 9]},
{"name": "节点2", "value": [1, 3, 6]},
]
# 初始化Treeview
treeview = ttk.Treeview(root)
treeview["columns"] = ("col1", "col2") # 设置列名
treeview.column("#0", width=100, stretch=tk.NO) # 主键列
treeview.heading("#0", text="ID") # 主键列标题
treeview.column("col1", width=100, stretch=tk.YES) # 列1
treeview.heading("col1", text="值1")
treeview.column("col2", width=100, stretch=tk.YES) # 列2
treeview.heading("col2", text="值2")
# 将数据添加到树中
for item in data:
treeview.insert("", "end", values=(item["name"], item["value"][0], item["value"][1]))
# 绑定列头的点击事件
treeview.bind("<ButtonRelease-1>", lambda event, col=event.widget.identify_column(event.y): sort_column(treeview, col))
def sort_column(tv, column):
tv.heading(column, command=lambda: sorted(tv.get_children(), key=lambda x: int(tv.item(x)["values"][column])))
# 显示 Treeview
treeview.pack(expand=True, fill=tk.BOTH)
root.mainloop()
```
在这个例子中,我们首先创建了一个`Treeview`并设置了两列。当用户点击任一列的列头时,会触发`sort_column`函数,该函数会根据当前点击列的值对所有节点进行排序。