【Python】Tkinter + Pandas实现窗口表格显示

【Python】Tkinter + Pandas实现窗口表格显示

相关代码运行环境

电脑系统:Windows 11
Python版本:3.12.4
使用的Python开发环境:PyCharm Community Edition 2024.1

操作过程

1.Tkinter和Pandas库的安装

首先需要确认是否已安装pip库,使用快捷键win+R,输入cmd打开终端,输入pip -V语句,如果出现如下显示,则代表pip已安装

已安装pip

如果没有安装成功,会提示:“pip”不是内部或外部命令,也不是可运行的程序或批处理文件,在cmd中输入以下命令进行安装:
py -m ensurepip --upgrade
Tkinter库是python自带的,不需要额外安装,在cmd中输入以下命令进行Pandas库的安装:
pip install pandas

2.新建项目以及配置相关库

本文使用PyCharm作为Python脚本开发环境,打开PyCharm,选择新建项目,输入项目名并选择项目存放地址。

打开新建好的项目文件后,点击左上角文件->设置->新建的项目名->Python解释器,我们可以看到,其中的软件包中只有一个pip

在这里插入图片描述

点击右上角添加解释器->添加本地解释器->Virtualenv环境,选择现有环境

在这里插入图片描述

选择你python中的python.exe文件并应用,我们会发现,我们之前安装的库也出现在软件包一栏中,代表我们现在已经配置好我们所需的库

在这里插入图片描述

3.部分代码的编写

创建一个窗口,并将其命名为“excel”,并设置窗口位置以及大小

window = tk.Tk()  # 新建窗口
window.title('excel')  # 命名窗口
window.geometry("600x500+200+150")  # 设置窗口位置以及大小,“宽x高+左边距+上边距”

在窗口内新建一个表格部分,并取出data中的数据,初始化表格以及设置表格列宽

table = ttk.Treeview(window)  # 在窗口内新建表格

table["columns"] = list(data.columns)
table["show"] = "headings"  # 获取data中的数据(逐行获取)
data.fillna('', inplace=True)  # 初始化表格
for column in table["columns"]:
    table.column(column, width=120)
# 设置表格列宽

设置表格界面右侧方和下方的滚动条

scrollbar_y = tk.Scrollbar(window, orient="vertical", command=table.yview)
table.configure(yscrollcommand=scrollbar_y.set)
scrollbar_y.pack(side='right', fill='y')
# 设置垂直方向的滚动条
scrollbar_x = tk.Scrollbar(window, orient="horizontal", command=table.xview)
table.configure(xscrollcommand=scrollbar_x.set)
scrollbar_x.pack(side='bottom', fill='x')
# 设置水平方向的滚动条

实现表格水平方向和垂直方向的自适应,使得在拉伸窗口时表格边框可以跟随变化

table.pack(expand=tk.YES, fill=tk.BOTH)  # 实现表格水平方向和垂直方向的自适应

填入表头以及其余数据

for column in table["columns"]:
    table.heading(column, text=column)
# 将表头数据填入表格
for row in data.itertuples(index=False):
    table.insert("", "end", values=row)
# 将其余数据逐行填入表格

加入表格刷新函数,使得当我们修改源表格文件时该窗口显示的表格内容也会有相应变化

def refresh():  # 表格刷新函数,刷新间隔为1000ms
    for child in table.get_children():
        table.delete(child)
    # 删除表格中除表头外的内容

    data_1 = pd.read_excel(address)  # 将表格数据读取至data中,支持本地文件系统或URL的“xls”和“xlsx”文件扩展名
    data_1.fillna('', inplace=True)  # 初始化表格

    for column_1 in table["columns"]:
        table.heading(column, text=column_1)
    # 将表头数据填入表格
    for row_1 in data_1.itertuples(index=False):
        table.insert("", "end", values=row_1)
    # 将其余数据逐行填入表格

    window.after(1000, refresh)  # 1000ms后执行表格刷新(refresh)函数

4.运行结果以及完整代码展示

右键运行python文件,得到的结果如下所示:

在这里插入图片描述

完整代码如下:

import warnings
import tkinter as tk
import pandas as pd
from tkinter import ttk


warnings.filterwarnings("ignore")


def refresh():  # 表格刷新函数,刷新间隔为1000ms
    for child in table.get_children():
        table.delete(child)
    # 删除表格中除表头外的内容

    data_1 = pd.read_excel(address)  # 将表格数据读取至data中,支持本地文件系统或URL的“xls”和“xlsx”文件扩展名
    data_1.fillna('', inplace=True)  # 初始化表格

    for column_1 in table["columns"]:
        table.heading(column, text=column_1)
    # 将表头数据填入表格
    for row_1 in data_1.itertuples(index=False):
        table.insert("", "end", values=row_1)
    # 将其余数据逐行填入表格

    window.after(1000, refresh)  # 1000ms后执行表格刷新(refresh)函数


# 1
window = tk.Tk()  # 新建窗口
window.title('excel')  # 命名窗口
window.geometry("600x500+200+150")  # 设置窗口位置以及大小,“宽x高+左边距+上边距”

# 2
address = "C:/Users/cloud/Desktop/datalin/data/蓝牙竞品参数一览表20240621.xlsx"  # excel文件地址
# address = "C:/Users/cloud/Desktop/datalin/data/test4_excel.xls"
data = pd.read_excel(address)  # 将表格数据读取至data中,支持本地文件系统或URL的“xls”和“xlsx”文件扩展名
# print(type(data))  # 查看data类型

# 3
table = ttk.Treeview(window)  # 在窗口内新建表格

table["columns"] = list(data.columns)
table["show"] = "headings"  # 获取data中的数据(逐行获取)
data.fillna('', inplace=True)  # 初始化表格
for column in table["columns"]:
    table.column(column, width=120)
# 设置表格列宽

# 4
scrollbar_y = tk.Scrollbar(window, orient="vertical", command=table.yview)
table.configure(yscrollcommand=scrollbar_y.set)
scrollbar_y.pack(side='right', fill='y')
# 设置垂直方向的滚动条
scrollbar_x = tk.Scrollbar(window, orient="horizontal", command=table.xview)
table.configure(xscrollcommand=scrollbar_x.set)
scrollbar_x.pack(side='bottom', fill='x')
# 设置水平方向的滚动条
table.pack(expand=tk.YES, fill=tk.BOTH)  # 实现表格水平方向和垂直方向的自适应

# 5
for column in table["columns"]:
    table.heading(column, text=column)
# 将表头数据填入表格
for row in data.itertuples(index=False):
    table.insert("", "end", values=row)
# 将其余数据逐行填入表格

# 6
window.after(1000, refresh)  # 1000ms后执行表格刷新(refresh)函数
window.mainloop()  # 显示窗口界面
  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值