Tkinter教程22:DataFrame数据加入到treeview树视图(含横纵滚动条+正反排序)

------------★Tkinter系列教程★------------

Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件

Tkinter教程20:treeview树视图组件,表格数据的插入与表头排序

Python教程57:tkinter中如何执行,单击按钮的单线程操作

Python教程56:tkinter中如何隐藏/去掉最大化窗口

Python项目10:使用Tkinter批量新建文件夹

Python源码04:使用Tkinter写一个计时器

教你使用Pyinstaller将Python源码打包成可执行程序exe的方法

经典游戏04:给老板写一封拒绝不了的辞职信

Python源码03:使用Tkinter写一个诗词答题软件

Python源码:Tkinter窗口中输入框和菜单组件的使用

Python源码02:使用Tkinter制作软件的登入页面

Python源码:Tkinter组件布局管理的3种方式

Python源码:关于Tkinter需要学习的知识点

Python源码01:使用Tkinter写一个计算器

Python中常用的GUI模块库有哪些?

Python源码:教你用Tkinter创建一个简单的桌面窗口程序

1.今天要掌握的主要内容

DataFrame数据加入到treeview树视图,列表框控件中

列表框可以自定义列宽的长度(字典数据的应用)

做一个带滚动条的列表(可以左右,上下随数据移动)

支持列表框的正向与反向排序
Tkinter教程22:DataFrame数据加入到treeview树视图(含横纵滚动条+正反排序)_第1张图片

# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
import tkinter as tk
from tkinter import ttk
import pandas as pd

# 1.创建一个简单的DataFrame
data = {'诗人': ['李白', '苏轼', '李清照', '杜甫', '岳飞'],
        '性别': ['男', '男', '女', '男', '男'],
        '芳龄': [18, 26, 13, 15, 28],
        '朝代': ['唐', '北宋', '宋', '唐', '南宋'],
        '薪资': [9000, 7000, 8000, 5000, 7000]}

df = pd.DataFrame(data)
print('1.DataFrame原始数据'.center(50, '-'))
print(df)
# 2.创建主窗口
root = tk.Tk()
root.title("Treeview with DataFrame")
root.geometry('450x300')  # 窗口的宽度和高度

# 3.1.列表框数字+文本排序
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))

# 3.2.df数据放到列表框
def dataframe_to_treeview(dfs, x1, y1, w, h, column_name='序号'):
    # 1.获取数据的列标题
    a = dfs.columns.values.tolist()
    a.insert(0, column_name)
    # 添加一个宽度列表,组成字典
    b = [80 for nums in range(len(a) - 1)]
    # [50, 80, 80, 80, 80, 80]
    b.insert(0, 50)
    df_titles = dict(zip(a, b))
    # print(df_titles)
    # 2.设置纵向滚动条
    xbar = tk.Scrollbar(root, orient='horizontal')
    xbar.place(x=x1, y=y1+h-3, width=w)
    ybar = tk.Scrollbar(root, orient='vertical')
    ybar.place(x=x1+w-3, y=y1, height=h)
    # 3.创建Treeview
    tree = ttk.Treeview(root, show='headings',
                     xscrollcommand = xbar.set,
                     yscrollcommand = ybar.set)

    tree['columns'] = list(df_titles)
    # 批量设置列属性
    for title in df_titles:
        # 加载列标题
        tree.heading(title, text=title)
        tree.column(title, width=df_titles[title], anchor='center')
        # 3.设置点击执行排序操作
        tree.heading(title, command=lambda _col=title: treeview_sort(tree, _col, False))

    # 遍历DataFrame的每一行,并将它们添加到Treeview中
    for index, row in dfs.iterrows():
        datas = row.tolist()
        datas.insert(0, index)
        # print(datas)
        # 添加行数据
        tree.insert('', 'end', text='', values=datas)
    # 将Treeview添加到主窗口
    tree.place(x=x1, y=y1, width=w, height=h)
    xbar.config(command=tree.xview)
    ybar.config(command=tree.yview)

# 创建两个表格
dataframe_to_treeview(df, 0, 20, 400, 100)
dataframe_to_treeview(df, 0, 170, 400, 100)
# 运行主循环
root.mainloop()

完毕!!感谢您的收看

----------★★历史博文集合★★----------
我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具
在这里插入图片描述

你可能感兴趣的:(我的Python教程,#,Pandas,#,tkinter,Python教程,pandas)