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()