PyQt5软件打包
我们通常在发布软件的时候,将编写好的程序打包成.exe程序,这样就可以在没有安装Python的环境中运行我们的软件,经常使用PyInstaller模块对源文件打包。安装PyInstaller输入以下命令安装pyinstaller:pip install pyinstaller验证是否安装成功,输入以下命令:pyinstaller一、单个.py文件打包先写一个简单的PyQt5程序,保存为testDe
我们通常在发布软件的时候,将编写好的程序打包成.exe程序,这样就可以在没有安装Python的环境中运行我们的软件,经常使用PyInstaller模块对源文件打包。
安装PyInstaller
输入以下命令安装pyinstaller:
pip install pyinstaller
验证是否安装成功,输入以下命令:
pyinstaller
一、单个.py文件打包
- 先写一个简单的PyQt5程序,保存为testDemo.py,内容如下:
#coding = 'utf-8'
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTime
class 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_())
- 使用如下命令进行打包
pyinstaller -F -w testDemo.py
-F:表示打包一个单个文件,如果你的代码都写在一个.py文件的话,可以使用这个,如果是多个.py文件就别用。
-w:使用Windows系统执行,当程序启动的时候不会打开命令行(只对Windows有效)。
执行完毕命令之后,会在.py文件所在的目录下,生成如下文件和文件夹内容,我们可以在dist目录中找到已经编译好的.exe可执行文件,双击就可以执行。
- 给exe可执行文件添加图标
我们可以在testDemo.spec文件的最后一行,添加如下内容,指定图标的路径。
然后使用命令:
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,这样就形成了多个文件的目录结构。
接下来我们就开始打包这个软件,使用如下命令:
pyinstaller -D -w main_xxx.py
-D:表示打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码。
打包之后目录内容如下:
三、包含QSS文件的软件打包
如果在PyQt5的项目工程中包含了QSS样式表,这里以我《3.在PyQt5中使用QSS进行UI美化》这篇文章的项目代码为例,项目执行效果如下图:
工程目录中还包含了.qrc资源文件,qss样式表目录和images图片资源目录,如下图:
这时候我们可以使用如下命令:
pyinstaller -D -w main_xxx.py
一切正常,开始打包我们的软件,也正常生成了dist目录,正常生成了运行目录,但是当我们点击生成的main_xxx.exe时,却报了如下图的错误:
原因是程序在调用QSS文件时使用了相对路径,运行的时候会去这个路径找对应的样式文件或者图片文件,main_xxx.py文件如下:
from PyQt5.QtWidgets import *
from mainwindow import MainWindow
import sys
import source_rc
class 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目录下,就可以正常运行了:
运行效果如下:
最后贴一张pyinstaller的参数图,大家可以参照查看。
更多推荐
所有评论(0)