自动创建word文档的exe文件,自定义文件名、保存路径

目录

一、exe

二、使用方法

三、代码

四、Python打包exe


一、exe

百度网盘:
链接:https://pan.baidu.com/s/1dyCo_iVv7fb369BHbwGjHg 
提取码:2333

夸克网盘:
链接:https://pan.quark.cn/s/36b14a53cccd 

二、使用方法

1. 下载完成后双击文件。

2.  先选择保存路径,然后在空白区域输入文件名称,注意用顿号、分割文件名称,最后点击创建,弹出创建完成的窗口后即可在对应目录找到文档。

三、代码

import os
from docx import Document
import tkinter as tk
from tkinter import filedialog, messagebox, Label, Button, Text, Scrollbar, Frameclass DocxCreatorApp(tk.Tk):def __init__(self):super().__init__()self.title("Word 文档创建器")self.geometry("400x300")self.init_ui()def init_ui(self):# 目录选择按钮self.btn_select_folder = Button(self, text="选择保存目录", command=self.select_folder)self.btn_select_folder.pack(pady=10)# 显示选择的目录self.label_folder_path = Label(self, text="未选择目录")self.label_folder_path.pack()# 文件名输入提示self.label_input = Label(self, text="输入文件名(用顿号 、分隔多个文件, 注意不要带有\/:*?<>|以上字符)")self.label_input.pack()# 文件名输入区域 + 滚动条self.text_frame = Frame(self)self.text_frame.pack()self.text_file_names = Text(self.text_frame, height=10, width=50)self.scrollbar = Scrollbar(self.text_frame, command=self.text_file_names.yview)self.text_file_names.configure(yscrollcommand=self.scrollbar.set)self.text_file_names.pack(side=tk.LEFT, expand=True)self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)# 创建文件按钮self.btn_create_files = Button(self, text="创建文件", command=self.create_files)self.btn_create_files.pack(pady=20)self.docx_path = ""def select_folder(self):folder_selected = filedialog.askdirectory()if folder_selected:self.docx_path = folder_selectedself.label_folder_path.config(text=self.docx_path)def create_files(self):if not self.docx_path:messagebox.showerror("错误", "请先选择一个保存目录")returnfile_names_raw = self.text_file_names.get("1.0", tk.END).split('、')# 过滤并清理文件名file_names = [name.strip().replace('/', '_').replace('\\', '_').replace(':', '_').replace('*', '_').replace('?', '_').replace('<', '_').replace('>', '_').replace('|', '_') for name in file_names_raw if name.strip()]if not file_names:messagebox.showerror("错误", "请输入至少一个文件名")returnfor name in file_names:# 确保文件名非空且没有使用违规字符if name:doc = Document()filename = os.path.join(self.docx_path, name + ".docx")try:doc.save(filename)except Exception as e:messagebox.showerror("错误", f"文件 '{name}' 创建失败: {e}")continue  # 处理下一个文件名messagebox.showinfo("完成", "所有文档已成功创建!")if __name__ == "__main__":app = DocxCreatorApp()app.mainloop()

1.command=self.select_folder
  将一个函数 self.select_folder 分配给按钮 self.btn_select_folder。当用户点击这个按钮时,就会调用 self.select_folder 函数。 self.select_folder 函数使用 filedialog.askdirectory() 来打开一个文件夹选择对话框,让用户选择一个目录,并将选定的目录路径存储在 self.docx_path 变量中。

2. self.btn_select_folder.pack(pady=10)
  self.btn_select_folder.pack(pady=10) 是一个 Tkinter 中的方法调用,用于将按钮 self.btn_select_folder 放置在GUI界面上,并指定垂直方向上的外边距为 10 px。

3. self.text_frame = Frame(self) ;self.text_frame.pack()
  self.text_frame = Frame(self)创建一个名为 text_frame 的 Frame 组件容器,相当于html中的盒子,self.text_frame.pack()将其放置在应用程序中(或者说是GUI界面)。

4. 文本区域+滚动条
  self.text_file_names = Text(self.text_frame, height=10, width=50)创建了一个文本框, self.text_file_names,self.text_frame 是文本框所在的父容器(通常是一个 Frame)(文本框和滚动条设置为同一个父容器放在一起),height=10 指定了文本框的高度为 10 行,width=50 则指定了文本框的宽度为 50 个字符。
  self.scrollbar = Scrollbar(self.text_frame, command=self.text_file_names.yview)创建一个滚动条, self.text_frame 是滚动条所在的父容器(文本框和滚动条设置为同一个父容器放在一起),command=self.text_file_names.yview 表示滚动条与文本框的纵向滚动事件关联起来。当用户拖动滚动条时,会触发 self.text_file_names.yview 方法,从而使文本框内容相应地进行垂直滚动。
  self.text_file_names.configure(yscrollcommand=self.scrollbar.set)将滚动条与文本框进行关联,yscrollcommand 为 self.scrollbar.set,表示滚动条的位置变化将通过调用 self.scrollbar.set 方法来通知文本框进行滚动。
  self.text_file_names.pack(side=tk.LEFT, expand=True),文本框 self.text_file_names 将其放置在应用程序(或者说是GUI界面)中。side=tk.LEFT 指定了文本框放置在父容器的左侧,这意味着它会沿着父容器的左边缘排列。expand=True 表示允许文本框在水平方向上扩展以填充剩余空间。如果父容器的大小发生变化,文本框将根据需要水平扩展以填满可用空间。
  self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)。side=tk.RIGHT 指定了滚动条放置在父容器的右侧,因此它会沿着父容器的右边缘排列。fill=tk.Y 表示滚动条在垂直方向上填充整个可用空间。这使得滚动条在垂直方向上占据父容器中所有可用的高度空间,以便用户可以通过滚动条进行垂直滚动。

5. file_names_raw = self.text_file_names.get("1.0", tk.END).split('、')
  获取文本框 self.text_file_names 中的内容,并将其按照 '、' 分割成一个文件名列表。详细的说,self.text_file_names.get("1.0", tk.END) 会获取从文本框的第一行第一个字符("1.0")到最后一行最后一个字符(tk.END)的所有文本内容。这个返回的字符串包含了文本框中的所有文本。
接下来,.split('、') 将获取到的文本字符串按照 '、' 进行分割,得到一个文件名列表。就是说文本框中的文本会被按照 '、' 进行分隔,将每个文件名作为列表中的一个元素。

 

四、Python打包exe

pyinstaller --onefile --windowed --name "DocxCreator" DocxCreatorApp.py

将 "DocxCreator" 和 DocxCreatorApp.py 分别修改为你希望的exe名称和你的python文件名。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/273057.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java宝典-抽象类和接口

目录 1. 抽象类1.1 抽象类的概念1.2 抽象类的语法1.3 抽象类的特点 2. 接口2.1 接口的概念2.2 接口的语法2.3 接口的特点2.4 实现多个接口2.5 接口的继承 3. 接口使用案例 铁汁们好,今天我们学习抽象类和接口~ 1. 抽象类 1.1 抽象类的概念 什么是抽象类?在面向对象中,如果一…

DataGrip 连接 Centos MySql失败

首先检查Mysql是否运行&#xff1a; systemctl status mysqld &#xff0c; 如果显示没有启动则需要启动mysql 检查防火墙是否打开&#xff0c;是否打开3306的端口 sudo firewall-cmd --list-all 如果下面3306没有打开则打开3306端口 publictarget: defaulticmp-block-inver…

力扣同类题:重排链表

很明显做过一次 class Solution { public:void reorderList(ListNode* head) {if(!head||!head->next)return;ListNode *fasthead,*lowhead;ListNode *prenullptr,*curnullptr,*nextnullptr;while(fast->next!nullptr){fastfast->next;if(fast->next)fastfast->…

Unity性能优化篇(十二) 音频优化之导入音频后的属性设置

Unity支持后缀为.wav、.ogg、.mp3的音频文件&#xff0c;但建议使用.wav&#xff0c;因为Unity对它的支持特别好。 注意&#xff1a;Unity在构建项目时总是会自动重新压缩音频文件&#xff0c;因此无需刻意提前压缩一个音频文件再导入Unity&#xff0c;因为这样只会降低该音频文…

Jmeter---非GUI命令行的执行生成报告、使用ant插件执行接口测试脚本生成报告

非GUI命令行的执行 1. 在jmx后缀的文件目录下打开命令行 2. 运行&#xff1a; jmeter -n -t filename.jmx&#xff08;-n : 非GUI的方式 -t: 指定需要执行的脚本&#xff09; 生成jtl报告 运行&#xff1a; jmeter -n -t filename.jmx -l result_filename.jtl 生成html报…

前端将html导出pdf文件解决分页问题

这是借鉴了qq_251025116大佬的解决方案并优化升级完成的&#xff0c;原文链接 1.安装依赖 npm install jspdf html2canvas2.使用方法 import htmlToPdffrom ./index.jsconst suc () > {message.success(success);};//记得在需要打印的div上面添加 idlet dom document.que…

数字化转型导师坚鹏:科技金融政策、案例及营销创新

科技金融政策、案例及营销创新 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好的政策&#xff1f; 不知道科技金融有哪些成功的案例&#xff1f; 不知道科技金融如何进行营销创新&#xff1f; 课程特色&#xff1a; 以案例的方式解…

力扣刷题Days15-136. 只出现一次的数字(js)

目录 1,题目 2&#xff0c;代码 2.1利用map()数据结构 2.2利用Set()数据结构 2.3位运算 3&#xff0c;学习与总结 3.1位运算 1,题目 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元…

数字图像处理—python

pycahem终端也可以下载库&#xff0c;我只会用终端下载,用的镜像网站 pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple pip install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple. pip install matplotlib -i https://pypi.tuna.tsinghua.edu.c…

GO: 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version[rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …

RHCE——一、OpenEuler22.03安装部署及例行性任务

RHCE 一、OpenEuler22.03安装部署及例行性任务 一、网络服务1.准备工作2、RHEL9操作系统的安装部署3、配置并优化OpenEuler22.034、网络配置实验&#xff1a;修改网络配置 二、例行性工作1、 单一执行的例行性任务&#xff1a;at&#xff08;一次性&#xff09;at命令详解 2、循…

学习笔记。。。

1.字符串的拼接 1.sprintf() 往字符串的前面或中间、后面拼接一个字符串。 2.strncpy()用来复制字符串的前n个字符 //dest为目标数组&#xff0c;src为源数组&#xff0c;n为要复制的字符个数 2.char* My_strncpy(char* dest, const char* src, int n) 3.char *strcat(ch…

知名比特币质押协议项目Babylon确认参加Hack.Summit()2024区块链开发者大会

Babylon项目已确认将派遣其项目代表出席2024年在香港数码港举办的Hack.Summit()2024区块链开发者大会。作为比特币生态的领军项目&#xff0c;Babylon积极参与全球区块链领域的交流与合作&#xff0c;此次出席大会将为其提供一个展示项目进展、交流技术与创新思路的重要平台。B…

【数据库-黑马笔记】基础-SQL

本文参考b站黑马数据库视频,总结详细全面的笔记 ,可结合视频观看1~26集 MYSQL 的基础知识框架如下 目录 一、MYSQL概述 1、数据库相关概念 2、MYSQL的安装及启动 二、SQL 1、DDL【Data Defination】 2、DML【Data Manipulation】 ①、插入 ②、更新和删除 3、 DQL【Data…

理解文件系统

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 磁盘 磁盘的机械构成 磁盘的物理存储 每个磁盘的盘面&#xff0c;磁头&#xff0c;扇面&#xff0c;扇区都有唯一的编号&#xff0c;同时&#xff0c;一个扇区的大小是512字节&#xff08;扇区的大小也有4KB的&#xff0c;或…

【C++庖丁解牛】模版初阶

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 泛型编程2. 函数模…

ssGSEA -- 学习记录

文章目录 biref统计学原理其他注意事项代码实现部分 biref 前情提要链接&#xff1a; https://blog.csdn.net/jiangshandaiyou/article/details/136536349 https://blog.csdn.net/jiangshandaiyou/article/details/134457515 相比起GSA&#xff0c;GSEA不再关注于差异基因&…

打卡--MySQL8.0 一(单机部署)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; MySQL 8.0 简介 MySQL 8.0与5.7的区别主要体现在&#xff1a;1、性能提升&#xff1b;2、新的默认…

【C++】三大特性之继承

1 继承的概念及定义 1.1 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展、增加功能&#xff0c;这样产生新的类&#xff0c;称派生类&#xff08;或子类&#xff09;。而被继承的…

.NetCore6.0实现ActionFilter过滤器记录接口请求日志

文章目录 目的实现案例&#xff1a;一.首先我们新建一个WebApi项目二.配置 appsettings.json 文件&#xff0c;配置日志存放路径三.创建 Model 文件夹&#xff0c;创建AppConfig类和ErrorLog类1.在AppConfig类中编写一个GetConfigInfo方法获取配置文件中的值2.在ErrorLog类中&a…