IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python Tkinter Treeview 表格的简单实例(批量初始化和多种排序方法) -> 正文阅读

[Python知识库]Python Tkinter Treeview 表格的简单实例(批量初始化和多种排序方法)

????????这是我在学习 Tkinter 创建 Treeview?表格时遇到的一些常见的需求,在网上找到了一些比较繁琐的代码于是打算结合自己的代码写一份实例。其中主要有批量初始化列头和插入数据的操作,以及按照不同的数据类型对甚至带不同单位的数据进行排序操作。

??

import tkinter
from tkinter import ttk

# 初始化窗口
win = tkinter.Tk()
win.title("Tkinter Treeview 实例")  # 窗口标题
win.geometry("453x127")  # 窗口的宽度和高度

# 排序
def treeview_sort_column(tv, col, reverse):
    l = [(tv.set(k, col), k) for k in tv.get_children('')]

    # 传入带单位的流量(MB/GB)计算并返回统计的单位(这里是 MB)以进行统一的数字大小排序
    # 如果对计算有精度需求或对其他单位也有需求如 B、KB、TB 等可以自行学习并增加
    MB_To_MB = lambda Traffic: int(Traffic.replace(' MB', '')) if 'MB' in Traffic else 0  # 这里只考虑 GB 和 MB 两种情况
    GB_To_MB = lambda Traffic: int(Traffic.replace(' GB', '')) * 1024 if 'GB' in Traffic else MB_To_MB(Traffic)
    if 'MB' in l[0][0] or 'GB' in l[0][0]:
        # 如果第一行的数据里存在 'MB' 或 'GB' 的文本(如果第一行没有的话会引发 BUG,我没想到其他的方法了)
        l.sort(key=lambda t: GB_To_MB(t[0]), reverse=reverse)  # 对流量进行转统一单位的数字后再排序
    elif 'cm' in l[0][0]:
        # 如果第一行的数据里存在 '元' 的文本
        l.sort(key=lambda t: int(t[0].replace(' cm', '')), reverse=reverse)  # 把单位去除后转数字再排序
    elif '元' 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 这种不符合从大到小或从小到大的排序

    # 移动数据
    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))


# 初始化表格
tree = ttk.Treeview(win, show="headings", height=5)  # 创建表格对象,show="headings" 为隐藏首列,height 为表格高度(行)
columns = {
    'ID': 50,
    '昵称': 100,
    '身高': 100,
    '余额': 100,
    '流量': 100
}  # 列头标题和对应的宽度,随便增删改查
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)  # 示例,只改 SW 就行
    # anchor: n, ne, e, se, s, sw, w, nw, or center
    tree.heading(column, command=lambda _col=column: treeview_sort_column(tree, _col, False))  # 设置点击执行排序操作

Data = [
    [1, '张三', '184 cm', '2000 元', '500 MB'],
    [2, '李四', '170 cm', '100 元', '10 GB'],
    [3, '王五', '175 cm', '-300 元', '-200 MB']
]  # 要导入表格的数据,这里引入单位,待会对不同的单位进行排序

# 遍历并导入
for person in Data:
    tree.insert('', person[0], text='', values=person)

tree.pack()
win.mainloop()  # 使窗口可视化

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:39:58  更:2021-08-18 12:41:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:03:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码