(三)Python-tkinter-pyinstaller项目之EXE打包器(项目展示版)

由于网上只讲述原理的文章太多,怎么使用的文章太少,所以本人文章只负责展示效果及代码注释,不着重讲解原理


一、前言

有没有被pyinstaller打包折磨的死去活来?有没有苦恼于pyinstaller打出的包是一个很大的exe文件,而其他打包库又不熟练?有没有想过只需一个按钮就能把python代码打包成exe?有没有羡慕打包的exe文件像主流软件一样有很多依赖项看起来很高大上?还在各种查询如何python代码打包后没有cmd黑框?

说在前面,请仔细阅读:
1.本EXE打包器打包你自己的代码时,请注意:如果GUI编程使用的是tkinter或者本文封装的tkinter,打包后可以正常运行,其他库正在研究配置如QT等。
2.打包前,请仔细运行你的python代码,打包后出现问题根据我多年的经验一般是代码漏洞。
3.若使用kivy库编写的GUI,请确保电脑中已正确安装kivy库文件。
4.打包时,请在软件上点击右侧切换使用的GUI库,配置正确的GUI
5.若未使用任何的GUI库,请选择默认的tkinter系列,因为kivy系列需要安装kivy库才能正常运行
那么这篇文章将解决你上述已经其他的疑惑,本文使用Python tkinter pyinstaller构建了一种EXE打包器软件。使用python构建代码,配合自定义封装的tkinter库实现GUI界面,并利用 pyinstaller实现exe打包功能。那么开始展示EXE打包器软件项目,软件界面如下:
在这里插入图片描述

二、建立根窗口

本文使用自定义封装的tkinter库实现GUI,解决python在GUI方面的不太友好性。废话不多说,先上代码,点击获取Headerfile

from Headerfile import *
class Python代码EXE打包器():
    def __init__(self):
    	##参数分别为窗口名称、宽度、高度、背景颜色、ico图标文件(为''表示无)
        self.根窗体 = MainWindows('Python代码EXE打包器',865,300,'green','')
if __name__ == '__main__':
    Python代码EXE打包器().根窗体.MainWindows.mainloop()

在这里插入图片描述

三、添加控件

在建立的根窗口上定义GUI的变量并添加控件:
点击获取Headerfile

from Headerfile import *
class Python代码EXE打包器():
    def __init__(self):
        self.根窗体 = MainWindows('Python代码EXE打包器',865,300,'green','图标.ico')
        self.initvariable()
        self.initweight()

    def initvariable(self):
    	###定义GUI的string类型变量,参数为初始化的值
        self.mainpy文件路径 = InitStringVariable('')
        self.mainpy文件夹 = InitStringVariable('')
        self.main文件名称 = InitStringVariable('')
        self.ico图标名称 = InitStringVariable('')
        self.输出文件夹 = InitStringVariable('')
        self.打包后文件名 = InitStringVariable('')
        self.生成exe名称 = InitStringVariable('')
        self.文件所在的盘 = InitStringVariable('')
        ###定义GUI的int类型变量,参数为初始化的值
		self.状态切换变量 = InitIntVariable(0)
		
    def initweight(self):
##定时器函数,参数分别为定时时间(ms),是否循环定时,定时到执行的函数,执行函数的参数(列表形式)##
        ClockTime(500,True,self.定时函数,[])
##标题控件,参数分别为放置的窗体,[行,列,跨行数,跨列数],内容,字体大小,[背景颜色,字体颜色]##
        TitleView(self.根窗体,[0,0,1,2],'python代码EXE打包器',40,['green','white'])
##路径选择控件,参数分别为放置的窗体,[行,列,跨行数,跨列数],控件名称,绑定的变量,字体大小,宽度,背景颜色##  
        PathChooseView(self.根窗体,[1,0,1,2],'main.py路径:',self.mainpy文件路径,20,25,'darkturquoise')
##名称数据显示控件, 参数分别为放置的窗体,[行,列,跨行数,跨列数],控件名称,绑定的变量,字体大小,宽度,背景颜色##      
        NameDataView(self.根窗体,[2,0,1,1],'main.py文件夹',self.mainpy文件夹,15,25,'deepskyblue')
        NameDataView(self.根窗体,[3,0,1,1],'main文件名称',self.main文件名称,15,25,'deepskyblue')
        NameDataView(self.根窗体,[3,1,1,1],'ico图标名称',self.ico图标名称,15,25,'deepskyblue')
        NameDataView(self.根窗体,[4,0,1,1],'输出文件夹路径',self.输出文件夹,15,25,'dodgerblue')
##多状态切换控件, 参数分别为放置的窗体,[行,列,跨行数,跨列数],控件名称,状态名称列表,状态数组变量,字体大小,背景颜色    
        MultiStatuSwitch(self.根窗体,[4,1,1,1],'点击右侧切换使用的GUI库',['tkinter系列','kivy系列'],self.状态切换变量,15,'dodgerblue')
        NameDataView(self.根窗体,[5,0,1,1],'打包后文件夹名',self.打包后文件名,15,25,'dodgerblue')
        NameDataView(self.根窗体,[5,1,1,1],'生成exe名称',self.生成exe名称,15,25,'dodgerblue')
##按钮控件,参数分别为放置的窗体,[行,列,跨行数,跨列数],控件名称,字体大小,背景颜色,执行函数,执行函数的参数(列表形式)##                 
        ButtonsView(self.根窗体,[6,0,1,2],'开始生成',20,'lightpink',self.打包生成,[])
    
    def 定时函数(self,参数):
        pass
    
    def 打包生成(self,参数):
        pass
if __name__ == '__main__':
    Python代码EXE打包器().根窗体.MainWindows.mainloop()

在这里插入图片描述

本封装库有一个功能,控件可跟随窗口大小的变化重新布局:
例如,将主窗口的宽度拖小,由于主窗口太小,且控件有字体大小限制,所以将显示不全
在这里插入图片描述
若将主窗口最大化:
在这里插入图片描述
或者向下拖拽:
在这里插入图片描述

四、封装tkinterGUI的python代码展示

(1)例如:打包一个简单的python代码,你需要做以下工作:
1.新建一个两级的文件夹,名字随便起,但不要太诡异!
2.将你的main.py(就是py代码的主函数所在的文件移入程序文件夹),以及你自己调用的文件,说白了就是把你原来的整个项目粘贴进去就行了
3.将的主函数所在的文件命名为main.py或者main.pyw,这个是必须的,因为为规范软件搜寻的main文件,强制使用者为主函数所在的文件命名。
在这里插入图片描述

import tkinter as tk

class 一个GUI界面类():
    def __init__(self,模块):
        ##通过初始化传参声明一个tkinter
        self.界面GUI = 模块
        ##设置窗口标题
        self.界面GUI.title('打包测试')
        ##设置窗口大小
        self.界面GUI.geometry("560x450")
        ##设置固定窗口大小,不能拖拽改变
        self.界面GUI.resizable(0,0)
        ##设置窗口背景颜色,如想改变颜色,可百度搜索tkinter背景颜色
        self.界面GUI.config(bg='Beige')
       
if __name__ == "__main__":
    ##声明一个tkinter
    root = tk.Tk()
    ##建立类
    一个GUI界面类(root)  
    ##消息循环,并保持窗口存在
    root.mainloop()

此时双击main.py运行是有cmd命令框的存在的
在这里插入图片描述
(2)现在启动软件,选择main.py所在的路径:
在这里插入图片描述

程序会自动生成打包后的文件夹名,以及生成exe的名称,这两个都来源于你的第二级文件夹名称,若想更改,请事先将第二级文件夹名字想好,还会自动搜索你选择路径下的main.py,以及ico图标名称(为空则使用python默认的图标)
(3)点击生成按钮,等待生成完毕,打包使用的是pyinstaller,若打包后的exe运行报错,还请仔细检查的python代码运行时你自定义的东西(文件、文件夹等),在打包后的文件夹中是否存在。
在这里插入图片描述

(4)点击打开exe文件夹,可用看到EXE打包器已成功将打包后exe所需的依赖项打包进来
在这里插入图片描述
(5)双击exe运行,与python代码的运行的结果相同,只是没有了cmd窗口在这里插入图片描述

五、封装kivyGUI的python代码展示

(1)以简单的kivy代码为例,代码如下:

from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.uix.label import Label
from kivy.core.window import Window
from kivy.utils import get_color_from_hex
class 布局器(StackLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        self.add_widget(Label(text = 'HHHHHH',font_size = 50))
      

class 计算器(App):
    def build(self):
        Window.clearcolor = get_color_from_hex('#66CDAA')
        return 布局器()

if __name__ == '__main__':
    计算器().run()

在这里插入图片描述
(2)启动软件,选择main.py路径,并切换使用的GUI库
在这里插入图片描述
(3)点击生成按钮,等待生成完毕
在这里插入图片描述
在这里插入图片描述
(4)双击exe运行,与python代码的运行的结果相同
在这里插入图片描述

总结

本文实现了一种Python tkinter pyinstaller的EXE打包器,用于生成EXE文件及其依赖文件,完整的代码请浏览Python-tkinter-pyinstaller项目之EXE打包器(代码展示版),或者直接下载安装包使用安装包链接

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆熊的世界

原创不复制精细无废料,谢谢赞赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值