【tkinter和pandas的联动】根据某列分sheet

这是一个使用tkinter作为窗体界面,结合pandas进行编程的示例。

1.库

import os
import pandas as pd
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog as fd

2.Pandas制作的def

  1. pandas的处理流程定义为def。 用tkinter的filedialog的askopenfilename获得文件路径;
  2. 用os的os.path.abspath(os.path.join(file, “…”))获得被选择的文件的路径;
  3. tkinter和pandas之间连接的关键:.get(),比如下面代码的eintrag1.get(),表示从名为eintrag1的entry组件获得值,从而支持pandas进行处理;
  4. .unique()取得唯一值,唯一值来自eintrag2.get();
  5. 用『for i in lst:』和『df2 = df[df[eintrag2.get()].str.contains(i)]』分配到每一sheet;
  6. 导出和保存:『df2.to_excel(writer,i,index=False)』和『writer.save()』
def 处理():
    Datei = fd.askopenfilename(
        title='选择', 
        filetypes=[
                    ("Excel files","*.xls"),
                    ("Excel files",".xlsx"),
                    ("Excel files","*.xlsm"),
                    ]) # 获取文件路径,通过中括号包含了三种excel文件格式 

    weg=os.path.abspath(os.path.join(Datei, "..")) # 获取文件夹路径:被选择的文件的路径  
    
    df = pd.read_excel(Datei,sheet_name=eintrag1.get()) #Pandas读取窗体界面的指定页  

    writer = pd.ExcelWriter(weg +'\\'+eintrag1.get() +'.xlsx')#生成以页(sheet)命名的xlsx文件

    lst = df[eintrag2.get()].unique() #取唯一值
    for i in lst:
        df2 = df[df[eintrag2.get()].str.contains(i)] #分配到每一sheet
        df2.to_excel(writer,i,index=False)
    writer.save()
    
    os.system(weg +'\\'+eintrag1.get() +'.xlsx') #导出后方便立即查看

3.Tkinter窗体的设定

创建窗体之后,标签(label)、输入(entry)和按钮(botton)都用grid定位

##### 创建root窗体
root = tk.Tk()
root.title('按列分sheet')
root.resizable(False, False)
root.geometry('280x90+630+420') # (宽度x高度)+(x轴+y轴)

宽度=9
高度=25
左右內距=8
上下內距=5
左右间距=5
上下间距=5
    
##### 页entry
## 页entry label 创建
lb_eintrag1 = tk.Label(root,width =宽度,padx=左右间距,pady=上下间距,text="页")
lb_eintrag1.grid(column=0,row=0, sticky="e")
eintrag1 = ttk.Entry(root,width = 宽度+3)
eintrag1.grid(column=1,row=0,padx=左右间距, sticky="w")

##### 列entry
## 列entry(eintrag) label 创建
lb_eintrag2 = tk.Label(root,width =宽度,padx=左右间距,pady=上下间距,text="列")
lb_eintrag2.grid(column=0,row=1, sticky="e")
eintrag2 = ttk.Entry(root,width = 宽度+3)
eintrag2.grid(column=1,row=1,padx=左右间距, sticky="w")

##### 处理 button
taste = ttk.Button(root,text='处理',width = 宽度,command=处理) #commdand引用def『处理』
taste.grid(column=3, row=0, rowspan=4, ipadx=5, ipady=10, padx=左右间距, sticky="e")

##### 应用的运行
root.mainloop()

4.完整代码

import os
import pandas as pd
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog as fd

def 处理():
    Datei = fd.askopenfilename(
        title='选择', 
        filetypes=[
                    ("Excel files","*.xls"),
                    ("Excel files",".xlsx"),
                    ("Excel files","*.xlsm"),
                    ]) # 获取文件路径,通过中括号包含了三种excel文件格式 

    weg=os.path.abspath(os.path.join(Datei, "..")) # 获取文件夹路径:被选择的文件的路径  
    
    df = pd.read_excel(Datei,sheet_name=eintrag1.get()) #Pandas读取窗体界面的指定页  

    writer = pd.ExcelWriter(weg +'\\'+eintrag1.get() +'.xlsx')#生成以页(sheet)命名的xlsx文件

    lst = df[eintrag2.get()].unique() #取唯一值
    for i in lst:
        df2 = df[df[eintrag2.get()].str.contains(i)] #分配到每一sheet
        df2.to_excel(writer,i,index=False)
    writer.save()
    
    os.system(weg +'\\'+eintrag1.get() +'.xlsx') #导出后方便立即查看

##### 创建root窗体
root = tk.Tk()
root.title('按列分sheet')
root.resizable(False, False)
root.geometry('280x90+630+420') # (宽度x高度)+(x轴+y轴)

宽度=9
高度=25
左右內距=8
上下內距=5
左右间距=5
上下间距=5
    
##### 页entry
## 页entry label 创建
lb_eintrag1 = tk.Label(root,width =宽度,padx=左右间距,pady=上下间距,text="页")
lb_eintrag1.grid(column=0,row=0, sticky="e")
eintrag1 = ttk.Entry(root,width = 宽度+3)
eintrag1.grid(column=1,row=0,padx=左右间距, sticky="w")

##### 列entry
## 列entry(eintrag) label 创建
lb_eintrag2 = tk.Label(root,width =宽度,padx=左右间距,pady=上下间距,text="列")
lb_eintrag2.grid(column=0,row=1, sticky="e")
eintrag2 = ttk.Entry(root,width = 宽度+3)
eintrag2.grid(column=1,row=1,padx=左右间距, sticky="w")

##### 处理 button
taste = ttk.Button(root,text='处理',width = 宽度,command=处理) #commdand引用def『处理』
taste.grid(column=3, row=0, rowspan=4, ipadx=5, ipady=10, padx=左右间距, sticky="e")

##### 应用的运行
root.mainloop()

双击后出现的界面
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allan_lam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值