python的Tkinter小程序上传Excel并下载Text

ops/2025/2/27 5:18:01/

实现一个图形化的Excel到文本文件转换工具,用户可以通过上传Excel文件并选择特定的列和行来生成一个文本文件。以下是详细的代码功能、使用的技术以及每一部分的详细注释:

1.功能概述

上传Excel文件:用户可以选择一个Excel文件进行上传。
选择列和行:用户可以勾选要下载的列和行。
下载文本文件:根据用户的选择,将选定的列和行的内容保存为文本文件。

2.使用的技术

Tkinter:Python的标准GUI库,用于创建图形用户界面。
Pandas:用于读取和处理Excel文件。
Openpyxl:Pandas依赖于openpyxl来处理.xlsx格式的Excel文件。

3.代码详细注释

python">import tkinter as tk
from tkinter import filedialog, messagebox, ttk
import pandas as pd
import osclass ExcelToTextApp:def __init__(self, root):self.root = rootself.root.title("Excel到文本转换器")self.root.geometry("800x600")  # 设置窗口大小self.root.configure(bg="#f0f0f0")  # 设置背景颜色# 使用中文字体self.font_style = ("黑体", 14)self.small_font_style = ("黑体", 12)# 创建主框架main_frame = ttk.Frame(self.root, padding="20")main_frame.pack(fill=tk.BOTH, expand=True)# 创建上传按钮self.upload_button = tk.Button(main_frame, text="上传Excel文件", font=self.font_style, command=self.upload_file, bg="#4CAF50", fg="white")self.upload_button.grid(row=0, column=0, columnspan=2, pady=20, padx=10, sticky=tk.W+tk.E)# 创建下载按钮(初始状态为禁用)self.download_button = tk.Button(main_frame, text="下载文本文件", font=self.font_style, state=tk.DISABLED, command=self.download_file, bg="#008CBA", fg="white")self.download_button.grid(row=1, column=0, columnspan=2, pady=10, padx=10, sticky=tk.W+tk.E)# 创建标签显示状态信息self.status_label = tk.Label(main_frame, text="", font=("黑体", 12), bg="#f0f0f0", fg="black")self.status_label.grid(row=2, column=0, columnspan=2, pady=20, padx=10, sticky=tk.W+tk.E)# 存储上传的Excel文件路径self.excel_path = Noneself.text_path = None# 列选择框架self.column_frame = ttk.Frame(main_frame, padding="10")self.column_frame.grid(row=3, column=0, padx=10, pady=10, sticky=tk.NSEW)# 行选择框架self.row_frame = ttk.Frame(main_frame, padding="10")self.row_frame.grid(row=3, column=1, padx=10, pady=10, sticky=tk.NSEW)# 初始化列和行选择区域self.init_column_row_selection()# 配置网格权重以适应窗口调整main_frame.grid_columnconfigure(0, weight=1)main_frame.grid_columnconfigure(1, weight=1)main_frame.grid_rowconfigure(3, weight=1)def init_column_row_selection(self):# 添加列选择标签column_label = tk.Label(self.column_frame, text="选择列:", font=self.small_font_style, bg="#f0f0f0", fg="black")column_label.pack(anchor=tk.W)# 添加行选择标签row_label = tk.Label(self.row_frame, text="选择行:", font=self.small_font_style, bg="#f0f0f0", fg="black")row_label.pack(anchor=tk.W)# 存储列和行的选择变量和复选框self.columns_var = []self.column_checkboxes = []self.rows_var = []self.row_checkboxes = []def upload_file(self):# 打开文件对话框选择Excel文件self.excel_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx *.xls")])if not self.excel_path:returntry:# 读取Excel文件df = pd.read_excel(self.excel_path)# 清除之前的列和行选择控件for checkbox in self.column_checkboxes:checkbox.destroy()for checkbox in self.row_checkboxes:checkbox.destroy()# 获取所有列名columns = df.columns.tolist()self.columns_var = [tk.IntVar() for _ in columns]self.column_checkboxes = [tk.Checkbutton(self.column_frame, text=col, variable=self.columns_var[i], font=self.small_font_style, bg="#f0f0f0", fg="black")for i, col in enumerate(columns)]# 布局列选择控件for i, checkbox in enumerate(self.column_checkboxes):checkbox.pack(anchor=tk.W)# 获取所有行索引rows = range(len(df))self.rows_var = [tk.IntVar() for _ in rows]self.row_checkboxes = [tk.Checkbutton(self.row_frame, text=str(row+1), variable=self.rows_var[i], font=self.small_font_style, bg="#f0f0f0", fg="black")for i, row in enumerate(rows)]# 布局行选择控件for i, checkbox in enumerate(self.row_checkboxes):checkbox.pack(anchor=tk.W)# 启用下载按钮self.download_button.config(state=tk.NORMAL)self.status_label.config(text="文件上传成功!请选择要下载的列和行。", fg="green")except Exception as e:self.status_label.config(text=f"发生错误: {e}", fg="red")def download_file(self):if not self.excel_path:self.status_label.config(text="没有可下载的文件。", fg="orange")returntry:# 读取Excel文件df = pd.read_excel(self.excel_path)# 获取选中的列selected_columns = [i for i, var in enumerate(self.columns_var) if var.get()]if selected_columns:df = df.iloc[:, selected_columns]# 获取选中的行selected_rows = [i for i, var in enumerate(self.rows_var) if var.get()]if selected_rows:df = df.iloc[selected_rows]# 转换为CSV格式text_content = df.to_csv(index=False, sep='\t')# 提供下载功能save_path = filedialog.asksaveasfilename(defaultextension=".txt",filetypes=[("文本文件", "*.txt")],initialfile="output.txt")if not save_path:return# 保存文本文件with open(save_path, 'w', encoding='utf-8') as file:file.write(text_content)self.status_label.config(text="文件下载成功!", fg="green")except Exception as e:self.status_label.config(text=f"发生错误: {e}", fg="red")if __name__ == "__main__":root = tk.Tk()app = ExcelToTextApp(root)root.mainloop()

4.效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/ops/161596.html

相关文章

Linux相关概念和易错知识点(30)(线程互斥、线程同步)

目录 1.线程互斥 (1)临界资源和临界区 (2)互斥和原子性 ①互斥 ②原子性 (3)加锁和解锁(互斥锁)的原理 (4)pthread_mutex系列函数和变量 ①lock、unlo…

【自学笔记】Spring Boot框架技术基础知识点总览-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Spring Boot框架技术基础知识点总览一、Spring Boot简介1.1 什么是Spring Boot?1.2 Spring Boot的主要特性 二、Spring Boot快速入门2.1 搭建Spring Boo…

Ajax数据采集与分析详解

文章目录 1. 什么是 Ajax?2. Ajax 的工作原理3. Ajax 在网页中的应用场景4. 爬取 Ajax 数据的方法4.1 分析网络请求4.2 模拟 Ajax 请求4.3 使用 Selenium 模拟浏览器4.4 使用 Headless 浏览器 5. 处理动态参数6. 处理分页和滚动加载7. 处理反爬虫机制8. 数据存储9. …

Linux 第三次脚本作业

源码编译安装httpd 2.4,提供系统服务管理脚本并测试(建议两种方法实现) 一、第一种方法 1、把 httpd-2.4.63.tar.gz 这个安装包上传到你的试验机上 2、 安装编译工具 (俺之前已经装好了) 3、解压httpd包 4、解压后的httpd包的文…

【初阶数据结构】森林里的树影 “堆” 光:堆

文章目录 1.堆的概念及结构2.堆的接口实现2.1 堆的初始化2.2 堆的销毁2.3 堆的交换2.4 堆的向上调整2.5 堆的插入2.6 堆的向下调整2.7 堆的删除2.8 堆顶获取2.9 堆的判空2.10 堆的节点个数2.11 堆的打印2.12 堆的排序(向上建堆)2.13 堆的排序&#xff08…

C# String.Intern 方法 详解

总目录 前言 在C#开发中,字符串作为最常用的数据类型之一,其内存管理直接影响程序性能。当处理海量文本数据时,重复字符串的内存占用可能成为性能瓶颈。string.Intern 方法正是为解决这一问题而生的核心工具,它通过字符串驻留池&…

网络原理--TCP的特性

TCP报文的结构: TCP的报头前20字节是固定长度,也可以通过“选项”来增加。 一、用来确保可靠性,最核心的机制,称为“确认应答” 引入一个情景: A向B询问cat和dog的意思: 这种情况是理想情况,…

Python的那些事第三十一篇:快速数据帧处理与可视化的高效工具Vaex

Vaex:快速数据帧处理与可视化的高效工具 摘要 在大数据时代,高效的数据处理和可视化工具对于数据科学家和分析师至关重要。Vaex作为一种开源的Python库,专为处理超大数据集而设计,通过惰性计算、内存映射和并行化技术,显著提升了数据处理的效率和性能。本文详细介绍了Va…