热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:pythontkiner实现自动打包程序

篇首语:本文由编程笔记#小编为大家整理,主要介绍了pythontkiner实现自动打包程序相关的知识,希望对你有一定的参考价值。环境python3.x使

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python tkiner实现自动打包程序相关的知识,希望对你有一定的参考价值。


环境 python3.x

使用前请确保安装pyinstaller库

本程序还未完善,可以自行完善

若要使用加密,请自行安装cryptodome库


import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import os
import sys
import hashlib
#使用前请先安装pyinstaller库
#pip3 install pyinstaller
#加密需要PyCrypto库 python3.x安装不了,若是必须加密,请使用 PyCryptodome
#pip3 install --timeout PyCryptodome
base64_ico=b\'AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAA/2AAAP9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAADAAAAAoAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD1AiAA9NIAAOUyUADVUnAAxTJQALSSEACDYaAAAAAAAADQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////////////////wH////////8AD///////+AAB///////gAAA//////wAAAAf////8AAAAAP///+AAAAAAP///gAAAAAAH//4AAAAAAAD/8AAAAAAAAH/wAAAAAAAAf/AAAAAAAAB/8AAAAAAAAH/wAAAAAAAAf/AAAAAAAAB/8AAAAAAAAH/wAAAAAAAAf/AAAAAAAAB/8AAAAAAAAH/wAAAAAAAAf/AAAAAAAAB/4AAAAAAAAA+AAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAA/4AAAAAAAAf/8AAAAAAAH//+AAAAAAD////AAAAAAH////gAAAAAP////wAAAAAB////4AAAAAH////8AAAAAf////8AAAAB/////4AAAAH/////gAAAA/////+AAAAD//////wAAAf//////gAAD///////AAA////////AAH////////gD////////////////////////////////////////////8=\'
#获取程序名
all_name=os.path.abspath(sys.argv[0]).replace("\\\\",\'/\').split("/")[-1]
#程序后缀
suffix=all_name.split(".")[-1]
#程序名
name=all_name[0:-len(suffix)-1]
#当前文件夹没有ico则生成ico
if os.path.isfile(name+".ico")==False:
with open(name+".ico",\'wb\') as f:
f.write(b64decode(base64_ico))
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.file = None
self.cmdParameter = {
\'-F\': True, # 将资源文件,.py文件打包成一个可运行文件
\'--i\': None, # ico文件位置
\'-n\': None, # 生成运行文件名称默认为源.py文件名
\'-workpath\': None, # 中间文件生成位置
\'-distpath\': None, # 目标文件生成位置
\'-a\': False, # 不包含unicode支持
\'--key\': None, # 指定加密的字符串16位
\'-d\': None, # 生成打包日志
\'-w\':True,#没有控制台0 ==True 1==False
\'\'\'
follow for windows
\'\'\'
\'–version-file\': None, # 添加版本信息.txt
\'--manifest\': None,
}
self.w_v=tk.IntVar()
self.f_v=tk.IntVar()
self.f_v.set(1)
self.w_v.set(0)
self.master.title("AutoPackage-1.0")
self.master.geometry("420x240")
# self.master[\'background\']="#000"
self.grid()
self.master.iconbitmap(name+".ico")
self.create_widgets()
def create_widgets(self):
self.mainLabel = tk.Label(self,text="AutoPackAge(pyInstaller打包辅助)").grid(row=0, column=0,columnspan=3)
self.fileLabel = tk.Label(self,text="选择py文件!").grid(row=1, column=0)
self.filePathBox = ttk.Entry(self,,)
self.filePathBox.grid(row=1, column=1)
self.cBtn = tk.Button(self,text=" 选择 ",relief=tk.GROOVE,command=self.choosePyFile)
self.cBtn.grid(row=1, column=2)
self.setImgLabel = tk.Label(self,text=" 设置ico :")
self.setImgLabel.grid(row=3, column=0)
self.icoImg = tk.Entry(self,选择图标",relief=tk.GROOVE,justify=tk.CENTER,command=self.setIco)
self.cImgBtn.grid(row=3, column=2, padx=0, pady=0)
self.oLabel = tk.Label(self,text="exe文件名:").grid(row=5, column=0)
self.outFileName = tk.Entry(self,)
self.outFileName.grid(row=5, column=1)
self.outBtn = tk.Button(self,text=" 确定 ",relief=tk.GROOVE,command=self.set_out_name,)
self.outBtn.grid(row=5, column=2)
self.f_btn = tk.Checkbutton(self,text="打包成独立exe",variable=self.f_v,Onvalue=1,offvalue=0,command=self.c_F_event)
self.f_btn.grid(row=6, column=0)
self.w_btn=tk.Checkbutton(self,text="控制台程序",variable=self.w_v,Onvalue=1,offvalue=0,command=self.c_w_event)
self.w_btn.grid(row=6,column=1)
self.Label = tk.Label(self,text="添加16位密钥",).grid(row=7, column=0)
self.keyTextBox = tk.Entry(self, 确定 ",padx=0,pady=0,relief=tk.GROOVE,command=self.set_key).grid(row=7, column=2)
self.createBtn = tk.Button(self,text=" 生成.exe可执行程序 ",
relief=tk.GROOVE,
command=self.createExe
).grid(row=8, column=0, columnspan=3)
def c_w_event(self):
if self.w_v.get()==1:
self.cmdParameter[\'-w\']=False
else:
self.cmdParameter[\'-w\']=True
def set_out_name(self):
self.cmdParameter[\'-n\'] = None
def set_key(self):
if self.file == None or self.file == "":
messagebox.showinfo(name+"消息提示", "请先选择打包文件")
else:
md = hashlib.md5()
with open(self.file, \'rb\') as f:
while 1:
data = f.read(1024)
if data:
md.update(data)
else:
break
self.cmdParameter[\'--key\'] = md.hexdigest()[0:16]
self.keyTextBox.insert(0, self.cmdParameter[\'--key\'])
print(self.cmdParameter[\'--key\'])
with open("key.txt", "w") as f:
f.write(self.cmdParameter[\'--key\'])
def c_F_event(self):
if self.f_v.get()==1:
self.cmdParameter[\'-F\']=True
else:
self.cmdParameter[\'-F\']=False
def setIco(self):
fname = filedialog.askopenfilename()
if \'ico\' in fname.split(".")[-1]:
self.icoImg.insert(-1, fname)
self.cmdParameter[\'--i\'] = fname
else:
messagebox.showinfo("AutoPackage提示消息", "不是ico图标文件")
def createExe(self):
if self.file == None or self.file == "":
messagebox.showinfo("AutoPackage消息提示", "请先选择py文件!")
return
cmd = "pyinstaller "
for key in self.cmdParameter.keys():
if self.cmdParameter[key] == True:
cmd += key
cmd += " "
if type(self.cmdParameter[key]) != type(True) and self.cmdParameter[key] != None:
cmd += key
cmd += " "
cmd += self.cmdParameter[key]
cmd += " "
cmd += self.file
print(cmd)
st = os.popen(cmd).read()
if "ERROR" not in st:
messagebox.showinfo(name+"消息提示", "文件打包完成!")
else:
print(st)
messagebox.showinfo(name+"消息提示", "打包失败!")
def choosePyFile(self):
fname = filedialog.askopenfilename()
if "py" in fname.split(".")[-1]:
self.filePathBox.delete(0,tk.END)
self.filePathBox.insert(0, fname)
self.file = fname
self.outFile = fname
self.outFileName.delete(0,tk.END)
self.outFileName.insert(0, fname)
else:
messagebox.showinfo(name+"消息提示", "文件不符合要求")

if __name__ == "__main__":
root = tk.Tk()
app = Application(master=root)
app.mainloop()

  

使用说明

 

 若要生成控制台程序,请打勾控制台程序,不勾选的话生成的exe程序执行是看不到控制台的,报错的话当然也看不到,会闪退

添加密钥点击确定就行,本人在这里是获得.py文件的md5的值,然后选择前面16位,至于加密,可以自己随便写了,最后确保是16位字符串就行

点击确定就行

一定要勾选打包成独立exe程序(默认是勾选的),这个选项是为了以后扩展,有很大一部分内容我没有写

这个程序本来是为了练习tkinter的,写完也没有再修改或者增加,肯定有很多不足之处,请见谅。

 



推荐阅读
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • vsftpd配置(虚拟用户、匿名用户登录)
    一、ftp服务搭建(一)概述1.ftp连接及传输模式(1)控制连接TCP21,用于发送FTP命令信息 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • This feature automatically validates new regions using the AWS SDK, ensuring compatibility and accuracy. ... [详细]
  • 我在使用 AngularJS 的路由功能开发单页应用 (SPA),但需要支持 IE7(包括 IE8 的 IE7 兼容模式)。我希望浏览器的历史记录功能能够正常工作,即使需要使用 jQuery 插件。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
  • 在IIS上运行的WebApi应用程序在开发环境中能够正常进行文件的读写操作。然而,在尝试通过FTP访问实时服务器上的文件列表时,遇到了无法显示的问题,尽管服务器配置与开发环境相同。这可能涉及权限设置、FTP服务配置或网络连接等方面的问题。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
author-avatar
萝莉控的许123321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有