博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cxfreeze打包pyqt5程序_8.PyQt5软件打包
阅读量:4963 次
发布时间:2019-06-12

本文共 2611 字,大约阅读时间需要 8 分钟。

dfdcf613c93f77235fba910c314edf8f.png

我们通常在发布软件的时候,将编写好的程序打包成.exe程序,这样就可以在没有安装Python的环境中运行我们的软件,经常使用PyInstaller模块对源文件打包。

安装PyInstaller

输入以下命令安装pyinstaller:

pip install pyinstaller

验证是否安装成功,输入以下命令:

pyinstaller

21309ee9525c15808c39d50f6ae47cbd.png

一、单个.py文件打包

1. 先写一个简单的PyQt5程序,保存为testDemo.py,内容如下:

#coding = 'utf-8' import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import QTimeclass Example(QWidget):    def __init__(self):        super().__init__()        self.Init_UI()    def Init_UI(self):        self.resize(300,300)        self.setWindowTitle('PyQt5')        self.btn = QPushButton('点击我',self)        self.btn.resize(100, 30)        self.lable = QLabel('显示',self)        self.lable.resize(100,30)        self.btn.move(100, 50)        self.lable.move(100, 100)        self.btn.clicked.connect(self.clientShow)         self.show()    def clientShow(self):        timeStr = QTime.currentTime().toString('HH:mm:ss')        self.lable.setText(timeStr) if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    app.exit(app.exec_())

2. 使用如下命令进行打包

pyinstaller -F -w testDemo.py

-F:表示打包一个单个文件,如果你的代码都写在一个.py文件的话,可以使用这个,如果是多个.py文件就别用。

-w:使用Windows系统执行,当程序启动的时候不会打开命令行(只对Windows有效)。

执行完毕命令之后,会在.py文件所在的目录下,生成如下文件和文件夹内容,我们可以在dist目录中找到已经编译好的.exe可执行文件,双击就可以执行。

266e9e76759b4bce5ca96d0fafb19a5e.png

173416fb69d9e7ecb29c78dcca91861a.png

3. 给exe可执行文件添加图标

我们可以在testDemo.spec文件的最后一行,添加如下内容,指定图标的路径。

962342d18b320178ecd932d67d5e22d1.png

然后使用命令:

pyinstaller TestAdd.spec

就可以将生成exe软件的图标修改了。

也可以在打包的时候直接执行如下命令:

pyinstaller -F -w testDemo.py -i lol.ico -n testDemo

二、包含.ui文件的软件打包

一般我们编写的PyQt5软件都不会把所有的内容写在一个.py文件中的,看过我前几篇和PyQt5相关文章的朋友都知道,一般我们都会将界面ui和逻辑分开,将多个界面和功能的模块分开。

以我之前写的一个Demo程序为例,首先使用QtDesigner设计一个界面,生成xxx.ui文件,使用pyuic5命令生成对应的ui_xxx.py文件,然后编写控制文件Callxxx.py,最后编写启动文件main_xxx.py,这样就形成了多个文件的目录结构。

760968b1232bbab1690cc739abf80fce.png

接下来我们就开始打包这个软件,使用如下命令:

pyinstaller -D -w main_xxx.py

-D:表示打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码。

打包之后目录内容如下:

cdbd50e5b0949d7994c3e09f9e16cbfa.png

三、包含QSS文件的软件打包

如果在PyQt5的项目工程中包含了QSS样式表,这里以我《3.在PyQt5中使用QSS进行UI美化》这篇文章的项目代码为例,项目执行效果如下图:

d3c0fb797e1dded1bb5103d21ee0f389.png

工程目录中还包含了.qrc资源文件,qss样式表目录和images图片资源目录,如下图:

eb86dc8f3e8301b168136a414937ae91.png

这时候我们可以使用如下命令:

pyinstaller -D -w main_xxx.py

一切正常,开始打包我们的软件,也正常生成了dist目录,正常生成了运行目录,但是当我们点击生成的main_xxx.exe时,却报了如下图的错误:

39a2c8528a5f979a599b06873e4991d8.png

原因是程序在调用QSS文件时使用了相对路径,运行的时候会去这个路径找对应的样式文件或者图片文件,main_xxx.py文件如下:

from PyQt5.QtWidgets import *from mainwindow import MainWindowimport sysimport source_rcclass CommonHelper: def __init__(self): pass @staticmethod def readQss(style): with open(style, 'r') as f: return f.read()if __name__ == '__main__':    app = QApplication(sys.argv)    mainWindow = MainWindow()    styleFile = './qss/style.qss' #换肤时进行全局修改,只需要修改不同的QSS文件即可 style = CommonHelper.readQss(styleFile)    mainWindow.setStyleSheet(style)    mainWindow.show()    sys.exit(app.exec_())

所以我将qss文件夹和images文件夹拷贝到生成的exe目录下,就可以正常运行了:

7546d5360dd387970f6e993480a78e86.png

运行效果如下:

6f959c4b5304df9e6ee980be3d06f0bf.png

最后贴一张pyinstaller的参数图,大家可以参照查看。

856ed2b77a2e6da66975449354926457.png

转载地址:http://iqqhp.baihongyu.com/

你可能感兴趣的文章
python代码格式规范
查看>>
IOS获取系统相簿里的照片
查看>>
OS开发UI篇—无限轮播(功能完善)
查看>>
[模板]数学整合
查看>>
不受控制的 position:fixed
查看>>
safari的坑
查看>>
awk根据指定的字符串分割字符串
查看>>
ubuntu下apt-get的配置文件是哪个
查看>>
[九省联考2018]一双木棋chess
查看>>
6.循环
查看>>
tp3.2 自带的文件上传及生成缩略图功能
查看>>
Angular 入门学习
查看>>
[单选题]条件语句的时候不应该使用哪一种控制结构
查看>>
1049 I Think I Need a Houseboat ACM题答案 java版
查看>>
socket tcp
查看>>
Vuex状态管理
查看>>
[LeetCode] The Maze III 迷宫之三
查看>>
rest_framework-02-权限-内置权限源码流程
查看>>
JavaWeb学习总结第五篇--认识Cookie机制
查看>>
网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default...
查看>>