吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2508|回复: 22
收起左侧

[Python 原创] tkinter多个小工具

[复制链接]
Eks6666 发表于 2023-8-25 21:31
本帖最后由 Eks6666 于 2023-8-25 21:34 编辑

本周利用晚上下班空闲时间用tkinter写了多个小工具,多个界面可以自由切换,由于源码太多,只摘抄部分源码,界面布局很丑,实现功能即可。还望铁子们多多包涵,恳请斧正
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import filedialog
from tkinter import scrolledtext  # 滚动文本框组件
from tkinter.messagebox import showerror,showinfo,showwarning
from tkinter import ttk
import  re
import os
import os.path as osp
from glob import glob
import pandas as pd

class MyPage(tk.Frame):
        def __init__(self, parent):
                super().__init__(parent)
                self.frame = tk.Frame(self, width=615, height=520, highlightbackground="black", highlightthickness=1, bd=3)
                self.frame.pack(side='right', fill='y')                
                self.createWidget()
        def createWidget(self):
                tk.Label(self.frame, text="****Excel两列字符串模糊匹配子系统****", width=40, height=2, font=("Calibri",15,'bold'),fg='red') \
                .place(relx=0.5,rely=0.0,anchor='n')
                tk.Button(self.frame, text="excel(df_1):", width=12, height=1, font=("楷体", 11), bg='#BFEFFA',
                relief='sunken',activebackground='green',command=lambda:self.select_xlsx(self.input_file1_entry)).place(x=162, y=60)
                self.var_input_file1 = tk.StringVar()
                self.input_file1_entry=tk.Entry(self.frame,width=30,textvariable=self.var_input_file1)
                self.input_file1_entry.place(x=268, y=62)
                self.input_file1_entry.bind("<Return>", self.select_xlsx)

                tk.Label(self.frame,text="df_1待匹配的列名:",width=17, height=1, font=("楷体", 11), fg='red').place(x=162, y=110)
                self.var_df_1= tk.StringVar()
                self.input_df_1_entry=tk.Entry(self.frame,width=25 ,textvariable=self.var_df_1,justify='center')
                self.input_df_1_entry.place(x=300, y=112)

                tk.Button(self.frame, text="excel(df_2):", width=12, height=1, font=("楷体", 11), bg='#BFEFFA',
                relief='sunken',activebackground='green',anchor='w',command=lambda: self.select_xlsx(self.input_file2_entry)).place(x=162, y=160)
                self.var_input_file2 = tk.StringVar()
                self.input_file2_entry=tk.Entry(self.frame,width=30,textvariable=self.var_input_file2)
                self.input_file2_entry.place(x=268, y=162)
                self.input_file2_entry.bind("<Return>", self.select_xlsx)

                tk.Label(self.frame,text="df_2待匹配的列名:",width=17, height=1, font=("楷体", 11), fg='blue').place(x=162, y=210)
                self.var_df_2= tk.StringVar()
                self.input_df_2_entry=tk.Entry(self.frame,width=25,textvariable=self.var_df_2,justify='center')
                self.input_df_2_entry.place(x=300, y=212)

                tk.Label(self.frame,text="匹配阈值(最大100):",width=18, height=1, font=("楷体", 11), fg='green').place(x=162, y=260)
                self.var_yuzhi= tk.StringVar()
                self.input_yuzhi_entry=tk.Entry(self.frame,width=24,textvariable=self.var_yuzhi,justify='center')
                self.input_yuzhi_entry.place(x=308, y=262)

                tk.Button(self.frame, text="匹配结果", width=8, height=1, font=("楷体", 11), bg='#BFEFFA',
                relief='sunken',activebackground='green',command=self.fuzzy_merge).place(x=162, y=310)
                tk.Button(self.frame, text="系统重置", width=8, height=1, font=("楷体", 11), bg='#BFEFFA',
                relief='sunken',activebackground='green',command=self.reset_system).place(x=282, y=310)
                tk.Button(self.frame, text="系统退出", width=8, height=1, font=("楷体", 11), bg='#BFEFFA',
                relief='sunken',activebackground='green',command=self.exit_system).place(x=402, y=310)

        def select_xlsx(self,entry,event=None):
                file_dialog = filedialog.askopenfilename(initialdir=None, title="选择xlsx文件", filetypes=[('Excel Files', ['.xlsx', '.xls'])], defaultextension=".xlsx")
                if file_dialog:
                        entry.delete(0, tk.END)  # 清空输入框内容
                        entry.insert(tk.END, file_dialog)  # 在输入框中插入文件路径

        #模糊匹配
        def fuzzy_merge(self):                
                if not all([self.var_input_file1.get(),self.var_input_file2.get(),self.var_df_1.get(),self.var_df_2.get(),self.var_yuzhi.get()]):
                        showwarning('警告!','请填写空白!')
                else:
                        df_1=pd.read_excel(self.input_file1_entry.get(),header=0)
                        df_2=pd.read_excel(self.input_file2_entry.get(),header=0)
                        key1=self.var_df_1.get()
                        key2=self.var_df_2.get()
                        threshold = int(self.var_yuzhi.get())
                        limit=2

                        s = df_2[key2].tolist()
                        m = df_1[key1].apply(lambda x: process.extract(x, s, limit=limit))#process.extract()返回的是字符串和相似度分数
                        df_1['matches'] = m
                        m2 = df_1['matches'].apply(lambda x: [i[0] for i in x if i[1] >= threshold][0] if len([i[0] for i in x if i[1] >= threshold]) > 0 else '')#i[0]是匹配字符串,i[1]是相似度分数
                        df_1['matches'] = m2
                        name,exc=osp.splitext(self.var_input_file1.get())
                        path=osp.dirname(name)
                        df_1.to_excel(osp.join(path,f'匹配分大于{threshold}结果'+exc),index=None)
                        os.startfile(osp.join(path,f'匹配分大于{threshold}结果')+exc)

        def reset_system(self):
                self.var_input_file1.set('')
                self.var_input_file2.set('')
                self.var_df_1.set('')
                self.var_df_2.set('')
                self.var_yuzhi.set('')

        def exit_system(self):
                from mian import StartPage
                self.master.switch_frame(StartPage, "主界面")#返回主界面
                


1.jpg
2.jpg
3.jpg
4.jpg

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
风逝998 + 1 + 1 谢谢@Thanks!
woyucheng + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lightninng 发表于 2023-8-25 23:12
界面要好看还是得pyqt啊,哈哈哈哈哈
tkkbootstrap也挺好的,楼主使用tkinter的话,这个上手更快~~~
baliao 发表于 2023-8-25 22:04
wwqkcb 发表于 2023-8-25 22:06
baliao 发表于 2023-8-25 22:07
缺少这个模块? from mian import StartPage
ydafu168 发表于 2023-8-25 22:48
  没看懂是干吗?多开吗?
ccber 发表于 2023-8-25 23:32
字体还有3D啊,是图片还是代码渲染?
brotheryan 发表于 2023-8-25 23:34
可以用PAGE配合写GUI
jinge9108 发表于 2023-8-26 04:30
感谢分享
realcode 发表于 2023-8-26 08:00
界面挺复古的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表