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

2023-05-16

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

Python-tkinter-pyinstaller项目之EXE打包器

  • 一、前言
  • 二、建立根窗口
  • 三、添加控件
  • 四、封装tkinterGUI的python代码展示
  • 五、封装kivyGUI的python代码展示
  • 总结


一、前言

有没有被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打包器(代码展示版),或者直接下载安装包使用安装包链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(三)Python-tkinter-pyinstaller项目之EXE打包器(项目展示版) 的相关文章

随机推荐

  • (修炼内功)函数栈帧的创建和销毁

    前言 修炼内功才是你和别人拉开差距的地方 越触及底层就会发现计算机竟有如此的有魅力 希望每个看到这篇文章的人都可以好好食用 目录 前言 1 什么是函数栈帧 2 理解函数栈帧能解决什么问题呢 xff1f 3 函数栈帧的创建和销毁解析 3 1
  • 调试技巧总结

    目录 1 调试是什么 xff1f 2 调试的基本步骤 3 Debug和Release的介绍 4 调试实例 4 1 实现代码 xff1a 求 1 xff01 43 2 xff01 43 3 xff01 43 n xff1b 不考虑溢出 4 2
  • 一篇文章带你弄懂数据的存储(C语言)

    前面我们已经初步了解了数据类型 xff0c 接下来我们就详细来学习进阶的数据存储 目录 1 类型的基本归类 2 分析两种数据类型的取值范围 3 大小端 大小端字节序存储 介绍 3 1什么大端小端 xff1a 3 2 为什么有大端和小端 3
  • (万字详解)指针进阶

    前面博客已经更新了初阶的指针 xff0c 接下来我们来详细地学习进阶指针的内容 目录 1 字符指针 2 指针数组 3 数组指针 3 1 数组指针的定义 3 2 amp 数组名VS数组名 3 3 数组指针的使用 4 数组参数 指针参数 4 1
  • c语言题目总结

    前言 xff1a 自己刷题过程中的错题本 xff0c 后续会一直更新 目录 1 输入一个班级5个学生各5科成绩 xff0c 输出5个学生各5科成绩及总分 2 实现字母的大小写转换 多组输入输出 3 能把函数处理结果的二个数据返回给主调函数
  • (c语言)万字详解字符函数,字符串函数,内存函数--内含所有模拟实现方法

    目录 前言 1 字符串操作函数 1 1 strlen 1 1 1 字符串以 39 0 39 作为结束标志 xff0c strlen函数返回的是在字符串中 39 0 39 前面出现的字符个数 xff08 不包含 39 0 39 1 1 2 参
  • ubuntu16.04开机登录后蓝屏

    ubuntu16 04 3 64bit 昨晚更新了内核 xff0c 然后在软件中心点了更新全部 xff0c 进度条没动过 xff0c 退出后shutdown xff0c 然后今早起来发现登录进去后桌面一片蓝 xff0c 图形界面gg了 xf
  • 数学分析(4): 函数的连续性

    连续性的概念 为了引入函数连续性的多种定义 xff0c 我们记 x为x的增量 定义一 xff1a 函数在一点上连续性定义 xff08 极限 xff09 设函数f在某U x0 内有定义 xff0c 若limx gt x0f x 61 f x0
  • PHP脚本执行超时的解决办法

    在php中默认脚本执行超时时间为30秒了 xff0c 如果你未进行设置30秒之后如果你的脚本还未执行完就会超时了 xff0c 下面我来给大详解解决PHP脚本执行超时的方法 php ini 中缺省的最长执行时间是 30 秒 xff0c 虽然可
  • 类和对象(一)

    目录 1 目标 xff1a 理解类和对象之间的关系 2 面向对象的初步认知 2 1 什么是面向对象 2 2 面向对象与面向过程 3 类的定义和使用 3 1 类的定义格式 4 类的实例化 4 1 什么是实例化 5 this引用 5 1 为什么
  • Java语言数据类型与c语言数据类型的不同

    目录 一 c语言数据类型 1 基本类型 xff1a 2 枚举类型 xff1a 3 空类型 xff1a 4 派生类型 xff1a 二 C语言编程需要注意的64位和32机器的区别 三 不同之处 一 c语言数据类型 首先 xff0c 先来整体介绍
  • 【代码源】每日一题 添加括号

    2022 05 06 题目链接 xff1a 添加括号 题目 Daimayuan Online Judge 题目描述 xff1a 现在给出一个表达式 xff0c 形如 a1 a2 a3 an 如果直接计算 xff0c 就是一个个除过去 xff
  • 【数据结构】顺序表

    目录 1 前言 2 线性表 3 顺序表 3 1 概念及结构 3 2 接口实现 1 顺序表初始化 2 顺序表销毁 3 检查空间并扩容 4 顺序表尾插 5 顺序表头插 6 顺序表尾删 7 顺序表头删 8 顺序表查找 9 顺序表在pos位置插入x
  • 如何python代码打包成可执行的.exe文件

    首先 xff0c 需要有pyinstaller库 xff0c 没有的可以打开win 43 R后输入cmd xff0c 打开界面如下 xff1a 直接使用pip命令 xff0c 输入 pip install pyinstaller 即可下载该
  • #C语言 输入10个整数,查找并删除重复的数字,打印结果。

    萌新做题 xff0c 以下为本人拙见 xff0c 若某位高人另有高招 xff0c 还望分享 VS2013 define CRT SECURE NO WARNINGS include lt stdio h gt define N 10 voi
  • Linux安装mysql遇到Error: libssl.so.10或libssl.so5问题的解决

    今天linux里安装mysql遇到的问题 很遗憾finallshell重启了 xff0c 我也懒得重新弄成报错 xff0c 弄报错截图了 xff08 手动狗头 xff09 报错类似于 xff1a mysql error while load
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

    704 二分查找 题目链接 leetcode 思路 设置一个指向中心位置的标识和两个左右指针 当左右指针符合正常顺序时 xff0c 比较中心位置元素与目标元素值大小 xff0c 根据大小适时更新中心位置标识 span class token
  • 项目笔记-瑞吉外卖

    文章目录 1 业务开发day011 软件开发整体介绍2 项目整体介绍 star 3 开发环境搭建4 登录功能 xff1a star4 1代码实现 5 退出功能6 页面效果出现 1 业务开发 day01 1 软件开发整体介绍 2 项目整体介绍
  • 2.黑马SpringbBoot运维篇笔记自己修改

    SpringBoot运维实用篇 基础篇发布以后 xff0c 看到了很多小伙伴在网上的留言 xff0c 也帮助超过100位小伙伴解决了一些遇到的问题 xff0c 并且已经发现了部分问题具有典型性 xff0c 预计将有些问题在后面篇章的合适位置
  • (三)Python-tkinter-pyinstaller项目之EXE打包器(项目展示版)

    由于网上只讲述原理的文章太多 xff0c 怎么使用的文章太少 xff0c 所以本人文章只负责展示效果及代码注释 xff0c 不着重讲解原理 Python tkinter pyinstaller项目之EXE打包器 一 前言二 建立根窗口三 添