tkinter Treeview组件排序

查看 31|回复 0
作者:Eks6666   
[Python] 纯文本查看 复制代码import tkinter
from tkinter import ttk
# 1.创建root主窗口
root = tkinter.Tk()
root.title('人生苦短-我用python')  # 窗口标题
root.geometry("450x150")  # 窗口的宽度和高度
# 设置纵向滚动条
scorllbary = tkinter.Scrollbar(root)
scorllbary.pack(side=tkinter.RIGHT, fill=tkinter.Y)
# 0.数字+文本排序
def treeview_sort(tv, col, reverse):
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    # print(l)
    # print(l[0][0])
    # 1.处理数据里面的单位
    if '元' in l[0][0]:
        # 如果第一行的数据里存在 '元' 的文本
        l.sort(key=lambda t: int(t[0].replace('元', '')), reverse=reverse)  # 把单位去除后转数字再排序
    else:
        try:
            # 优先尝试数字排序
            l.sort(key=lambda t: int(t[0]), reverse=reverse)
        except:
            # 出错则普遍排序
            l.sort(reverse=reverse)
            # 这种排序根据首位字符来排序,不适合数字,会出现:1,11,2 这种不符合从大到小或从小到大的排序
    print(l)
    # 移动数据
    for index, (val, k) in enumerate(l):
        # print(k)
        tv.move(k, '', index)
    tv.heading(col, command=lambda: treeview_sort(tv, col, not reverse))
# 2.创建Treeview表格组件
tree = ttk.Treeview(root, show='headings',yscrollcommand=scorllbary.set)
# 创建表格对象,show='headings' 为隐藏首列,height 为表格高度(行)
columns = {
    'ID': 50,
    '作者': 80,
    '性别': 80,
    '年龄': 80,
    '工资': 80,
    '朝代': 80
}  # 列头标题和对应的宽度,随便增删改查
# 批量设置列头标题
tree['columns'] = list(columns)
# 批量设置列属性
for column in columns:
    # 设置列标题
    tree.heading(column, text=column)
    tree.column(column, width=columns[column], anchor='center')
    # 设置列酷安,anchor 为锚点,'center' 表示中央居中
    # 也可以用方位词东南西北的英文缩写表示,即 N(North, 北): 上中对齐、SW(South West, 西南):左下对齐
    # tree.column(column, width=columns[column], anchor=tkinter.SW)
    # anchor: n, ne, e, se, s, sw, w, nw, or center
    # 3.设置点击执行排序操作
    tree.heading(column, command=lambda _col=column: treeview_sort(tree, _col, False))
# 3.要导入表格的行数据
Data = [
    [1, '李白', '男', '18', '8000元', '唐'],
    [2, '杜甫', '男', '16', '5000元', '唐'],
    [3, '苏轼', '男', '26', '7000元', '宋'],
    [4, '李清照', '女', '15', '8000元', '宋'],
    [5, '辛弃疾', '男', '27', '8000元', '宋'],
    [6, '岳飞', '男', '30', '9000元', '宋'],
    [7, '纳兰性德', '男', '20', '7000元', '清'],
]
# 遍历导入数据
for person in Data:
    tree.insert('', 'end', text='', values=person)
scorllbary.config(command=tree.yview)
# 4.显示 Treeview 部件
tree.pack(side='top', fill='both', expand=True)
# 使窗口可视化
root.mainloop()

表格, 窗口

您需要登录后才可以回帖 登录 | 立即注册

返回顶部