使用Python Tkinter创建文件生成工具

我们将使用Python的Tkinter模块创建一个简单的文件生成工具。这个工具可以用来创建Excel、文本、Python脚本和Word文档等不同类型的文件。

1、准备工作

首先,确保你已经安装了Python和所需的第三方库:Tkinter、openpyxl和python-docx。你可以使用pip来安装它们:

pip install tkinter openpyxl python-docx

2、创建GUI界面

我们将使用Tkinter模块来创建用户界面。以下是创建主窗口和调用文件类型选择对话框的代码:

import tkinter as tk
from tkinter import simpledialog
from tkinter import messagebox
from openpyxl import Workbook
from docx import Document

# 定义创建文件的函数...

def show_file_dialog():
    root = tk.Tk()
    root.withdraw()
    
    # 创建文件类型选择对话框的代码...
    
    window.mainloop()

show_file_dialog()

3、创建不同类型的文件

接下来,我们将编写函数来创建Excel、文本、Python脚本和Word文档等不同类型的文件。

# 定义创建文件的函数...

def create_excel_file():
    wb = Workbook()
    wb.save('new_document.xlsx')
    messagebox.showinfo("成功", "新的 Excel 文件创建成功。")

def create_text_file():
    with open('new_document.txt', 'w') as f:
        f.write("这是一个新的文本文档。")
    messagebox.showinfo("成功", "新的文本文件创建成功。")

def create_python_file():
    with open('new_document.py', 'w') as f:
        f.write("# 这是一个新的 Python 脚本。\n\nprint('你好,世界!')")
    messagebox.showinfo("成功", "新的 Python 脚本文件创建成功。")

def create_word_file():
    doc = Document()
    doc.save('new_document.docx')
    messagebox.showinfo("成功", "新的 Word 文档创建成功。")

4、显示文件类型选择对话框

最后,我们将完善show_file_dialog函数,以便用户可以选择要创建的文件类型。

# 创建文件类型选择对话框的代码...

def show_file_dialog():
    root = tk.Tk()
    root.withdraw()
    
    file_types = ['xlsx', 'txt', 'py', 'docx']
    window = tk.Toplevel(root)
    window.geometry("300x100")
    
    file_type_var = tk.StringVar(window)
    file_type_var.set(file_types[0])
    file_type_menu = tk.OptionMenu(window, file_type_var, *file_types)
    file_type_menu.pack()
    
    def on_ok():
        file_type = file_type_var.get()
        
        if file_type:
            if file_type == 'xlsx':
                create_excel_file()
            elif file_type == 'txt':
                create_text_file()
            elif file_type == 'py':
                create_python_file()
            elif file_type == 'docx':
                create_word_file()
            window.destroy()
            root.destroy()

    ok_button = tk.Button(window, text="确定", command=on_ok)
    ok_button.pack()
    
    window.mainloop()

show_file_dialog()

现在,当用户运行程序时,将会弹出一个窗口,用户可以选择要创建的文件类型,并点击“确定”按钮,然后相应的文件将会被创建。

5、完整代码

import tkinter as tk  # 导入Tkinter模块,用于创建GUI界面
from tkinter import simpledialog  # 导入simpledialog模块,用于创建简单的对话框
from tkinter import messagebox  # 导入messagebox模块,用于显示消息框
from openpyxl import Workbook  # 导入openpyxl模块,用于处理Excel文件
from docx import Document  # 导入docx模块,用于处理Word文档

# 定义函数:创建一个新的Excel文件
def create_excel_file():
    wb = Workbook()  # 创建一个Workbook对象
    wb.save('new_document.xlsx')  # 将Workbook对象保存为Excel文件
    messagebox.showinfo("成功", "新的 Excel 文件创建成功。")  # 显示消息框,提示文件创建成功

# 定义函数:创建一个新的文本文件
def create_text_file():
    with open('new_document.txt', 'w') as f:
        f.write("这是一个新的文本文档。")  # 向文件中写入内容
    messagebox.showinfo("成功", "新的文本文件创建成功。")  # 显示消息框,提示文件创建成功

# 定义函数:创建一个新的Python脚本文件
def create_python_file():
    with open('new_document.py', 'w') as f:
        f.write("# 这是一个新的 Python 脚本。\n\nprint('你好,世界!')")  # 向文件中写入内容
    messagebox.showinfo("成功", "新的 Python 脚本文件创建成功。")  # 显示消息框,提示文件创建成功

# 定义函数:创建一个新的Word文档
def create_word_file():
    doc = Document()  # 创建一个Document对象
    doc.save('new_document.docx')  # 将Document对象保存为Word文档
    messagebox.showinfo("成功", "新的 Word 文档创建成功。")  # 显示消息框,提示文件创建成功

# 定义函数:显示文件类型选择对话框
def show_file_dialog():
    root = tk.Tk()  # 创建一个Tk对象
    root.withdraw()  # 隐藏Tk窗口

    # 定义文件类型选项
    file_types = ['xlsx', 'txt', 'py', 'docx']

    # 创建一个新窗口
    window = tk.Toplevel(root)

    # 设置窗口大小
    window.geometry("300x100")

    # 创建下拉菜单以选择文件类型
    file_type_var = tk.StringVar(window)
    file_type_var.set(file_types[0])  # 默认选择第一个文件类型
    file_type_menu = tk.OptionMenu(window, file_type_var, *file_types)
    file_type_menu.pack()

    # 定义确认按钮的事件处理函数
    def on_ok():
        # 获取用户选择的文件类型
        file_type = file_type_var.get()

        # 根据用户选择的文件类型调用相应的函数创建文件,并显示消息框提示用户文件创建成功
        if file_type:
            if file_type == 'xlsx':
                create_excel_file()
            elif file_type == 'txt':
                create_text_file()
            elif file_type == 'py':
                create_python_file()
            elif file_type == 'docx':
                create_word_file()
            window.destroy()  # 销毁窗口
            root.destroy()  # 销毁主窗口

    # 创建确认按钮,点击按钮时触发on_ok函数
    ok_button = tk.Button(window, text="确定", command=on_ok)
    ok_button.pack()

    # 显示对话框
    window.mainloop()

# 调用show_file_dialog函数,运行程序
show_file_dialog()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】日志分析与管理

作为一个运维,如果不会看日志,就好比是冬天刚刚用热水泡完了脚,接着就立马让人把水喝掉。 目录 一、Inode介绍 1.1 什么是inode 1.2 inode表内容 1.3 查看inode号的方式 二、日志分析 2.1 日志的用途 2.2 日志的分类 2.3 日志级别 2…

Flink学习(七)-单词统计

前言 Flink是流批一体的框架。因此既可以处理以流的方式处理,也可以按批次处理。 一、代码基础格式 //1st 设置执行环境 xxxEnvironment env xxxEnvironment.getEnvironment;//2nd 设置流 DataSource xxxDSenv.xxxx();//3rd 设置转换 Xxx transformation xxxDS.…

简述MASM宏汇编

Hello , 我是小恒不会java。今天写写x86相关底层的东西 寄存器 8086由BIU和EU组成 8088/8086寄存器有14个。8通用,4段,1指针,1标志 8个通用寄存器:这些寄存器可以用来存储任意类型的数据,包括整数、地址等。8086有8个…

Modbus转Profinet网关接电表与工控机通讯

Modbus转Profinet网关(XD-MDPN100/300)的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议,支持Modbus RTU主站/从站,并可以与RS485接口的设备,如变频器…

找对方法,单位信息宣传工作向媒体投稿其实也简单

曾经,作为一名肩负单位信息宣传重任的我,每当面对那堆叠如山的稿件与闪烁不定的电脑屏幕,心中总会涌起一股无尽的焦虑与疲惫。尤其在向媒体投稿这个环节,我仿佛陷入了一个难以挣脱的漩涡,邮箱投稿的艰辛、审核的严苛、出稿的迟缓以及成功发表的少之又少,如同一座座无形的大山压…

力扣面试 150二叉搜索树迭代器 中序遍历 栈模拟递归 步骤拆分

Problem: 173. 二叉搜索树迭代器 思路 &#x1f469;‍&#x1f3eb; 三叶 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( h ) O(h) O(h) Code class BSTIterator { Stack<TreeNode> d new Stack<>();public BSTIterator(TreeNode root){dfsLe…

书生·浦语大模型第二期实战营第七节-OpenCompass 大模型评测实战 笔记和作业

来源&#xff1a; 视频教程&#xff1a;https://www.bilibili.com/video/BV1Pm41127jU/?spm_id_from333.788&vd_sourcef4a51f7f5a63e756f73ad0dff318c1a3 文字教程&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 作业来源&#x…

day12 过一遍Nestjs框架(java转ts全栈/3R教室)

介绍&#xff1a;NestJS是Ts技术栈的后端框架&#xff0c;相当于Java中的springboot。 学习方法&#xff1a;与java技术体系进行对比学习。学习目标&#xff1a;nest相关知识也是挺多&#xff0c;但对比学spring的时候&#xff0c;大部分在项目生产中都是套路化的&#xff0c;大…

SpringMVC基础篇(二)

文章目录 1.Postman1.基本介绍Postman是什么&#xff1f; 2.Postman快速入门1.Postman下载点击安装自动安装在系统盘 2.基本操作1.修改字体大小2.ctrl “” 放大页面3.进入创建请求界面 2.需求分析3.具体操作4.保存请求到文件夹中1.点击保存2.创建新的文件夹3.保存成功 3.使用…

Linux系统IO

Linux系统中的IO函数主要包括两大类&#xff1a;标准C库中的函数和Linux系统调用。这些函数可以用于文件操作、网络通信、设备控制等多种IO任务。以下是Linux系统中常用的IO函数和系统调用的概述&#xff1a; 标准C库IO函数 这些函数是高级的、封装好的&#xff0c;并且与操作…

一些好听且有心意的英文全名Burwood新南威尔士州伯伍德喝酒上脸就是乙醛中毒1. 康奈尔大学官宣恢复标化要求2. 香港城市大学(东莞)正式设立!

目录 一些好听且有心意的英文全名 Burwood新南威尔士州伯伍德 喝酒上脸就是乙醛中毒 1. 康奈尔大学官宣恢复标化要求 2. 香港城市大学&#xff08;东莞&#xff09;正式设立&#xff01; 一些好听且有心意的英文全名 在选择好听且有意义的英文全名时&#xff0c;我们可…

[MoeCTF-2022]Sqlmap_boy

title:[MoeCTF 2022]Sqlmap_boy 查看网页源代码&#xff0c;得到提示 <!-- $sql select username,password from users where username".$username." && password".$password.";; --> 用万能密码绕过&#xff0c;用’"闭合 爆数据库…

【NLP】大语言模型基础之GPT

大语言模型基础之GPT GPT简介1. 无监督预训练2. 有监督下游任务微调 GPT-4体系结构1. GPT-4的模型结构2. GPT-4并行策略3. GPT-4中的专家并行GPT-4的特点 参考连接 以ELMo为代表的动态词向量模型开启了语言模型预训练的大门&#xff0c;此后&#xff0c;出现了以GPT和BERT为代表…

Simulink从0搭建模型03-Enabled Subsystem 使能子系统

参考博客 b站视频 【Simulink 0基础入门教程 P4 使能子系统 Enabled Subsystem 的使用介绍】 个人听了这个博主的视频风格觉得很适合我入门学习&#xff0c;讲得很清楚。 另外&#xff0c;视频里面教得很详细了&#xff0c;我也不会再详细写怎么打开创建等步骤&#xff0c;跟着…

年如何在不丢失数据的情况下解锁锁定的 Android 手机?

当您忘记密码、PIN 码或图案并且想要解锁 Android 手机时&#xff0c;您可能会丢失 Android 手机上的数据。但您无需再担心&#xff0c;因为在这里&#xff0c;我们想出了几种解锁锁定的 Android 手机而不丢失数据的方法。 方法 1. 使用 Android Unlock 解锁锁定的 Android 且不…

拿捏 顺序表(1)

目录 1. 顺序表的分类2. 顺序表实现3. 顺序表实现完整代码4. 总结 前言: 一天xxx想存储一组数据, 并且能够轻松的实现删除和增加, 此时数组大胆站出, 但是每次都需要遍历一遍数组, 来确定已经存储的元素个数, 太麻烦了, 于是迎来了顺序表不屑的调侃: 数组你不行啊… 顺序表是一…

MSE实现全链路灰度实践

技术架构包括以下基础设施和云服务&#xff1a; 1个地域&#xff1a;ACK集群、微服务应用、MSE实例均部署在同一地域下。 1个专有网络VPC&#xff1a;形成云上私有网络&#xff0c;确保核心云资源的网络环境&#xff0c;如容器服务ACK、微服务引擎MSE。 ACK集群&#xff1a;简单…

升级 jQuery:努力打造健康的 Web 生态

jQuery 对 Web 的影响始终是显而易见的。当 jQuery 在 2006 年首次推出时&#xff0c;几乎立即成为 Web 开发人员的基本工具。它简化了 JavaScript 编程&#xff0c;使操作 HTML 文档、处理事件、执行动画等变得更加容易。从那时起&#xff0c;它在 Web 标准和浏览器功能的演变…

idea中打印日志不会乱码,但是部署到外部tomcat中乱码了。

问题&#xff1a;如图Tomcat乱码&#xff0c;而且启动时的系统日志不会乱码&#xff0c;webapp中的打印日志才乱码。 idea中的情况如下&#xff1a;正常中文展示。 问题分析&#xff1a;网上分析的原因是Tomcat配置的字符集和web应用的字符集不匹配&#xff0c;网上集中的解决…

Springboot的日常操作技巧

文章目录 1、自定义横幅2、容器刷新后触发方法自定义3、容器启动后触发方法自定义**CommandLineRunner**ApplicationRunner 不定时增加 参考文章 1、自定义横幅 简单就一点你需要把banner.text放到classpath 路径下 &#xff0c;默认它会找叫做banner的文件&#xff0c;各种格式…