pyqt5超详细多进程界面设计及打包流程(UI框架建构、多线程打包、.ui.qrc文件的转.py)
文章目录
项目的目标是制作一个目标检测的UI界面,实现各类目标的实时检测。在制作的过程中真的遇到了数不清的坑,坑死人了。我自己梳理一下方便下次做项目还掉坑里,顺便给大伙避避坑,当然每个人遇到的情况不同,如果我遇到的问题恰好帮助你解决问题了那就太好啦。
环境搭建
-
在终端打开designer(如果未安装网上资料很多就不赘述了)
-
如果已经安装但是无法使用,可以查看一下anaconda/python环境是否配置正确
-
设置中搜索编辑系统环境变量
-
选择环境变量
-
-
- 查看系统变量中(anaconda及anaconda\Script路径是否已经添加若无在Path中添加)
-
如果项目需要打包最好新建一个虚拟环境(不然你的exe文件会占用巨大空间,有时候甚至打包不了后续详细展开)
-
虚拟环境的安装
- 终端键入conda create --name env_name python_version
# 举个例子 conda create --pyqt_310 python=3.10
- 在pycharm中进行配置(如图操作先找到setting,详细可以查阅资料)
- 虚拟环境配置好后将所需要的库安装一下(pyqt5…)
框架设计
-
QTdesigner界面的认识(一位博主写的特别清晰把链接放下面,小白可以仔细学习一下,虽然我也是小白哈哈哈,常用常新嘛)
[新手界面及控件介绍超链接](PyQt5 Qt Designer 新手教程(一)—— 软件界面介绍-CSDN博客)
-
进阶一点布局设计(我才用红框垂直和水平布局,因为这种布局在缩放的情况下也能不变形)
-
垂直和水平布局
- warning:就是这种布局你是没有办法去调正它的大小的
- 方法:可以在总体布局搭好了后添加groupbox这个东西可以放各种东西而且里面的东西可以肆意调整。
- 里面的弹簧(Spacers)是个好东西这样可以让你的布局更美观。
- 对象及属性(主要介绍stylesheet,作用简单来说就是个性化、变好看)
- styleSheet配置基本操作
首先要写对象名字或类别{;;;}大括号里填属性,“;”前的内容为一个属性如下图所示(红)。
其次可以在大括号里添加背景图片,资源,颜色,边框宽度,等等很多很多。(绿)
tips:背景图的添加需要利用到资源文件下面会详细说明。
资源文件配置
- 要想将图片插入到UI界面就需要配置好资源文件
- 资源文件的创建(找到这个小铅笔)
- 资源文件里的细节
- 新建的资源是.qrc文件
- 资源文件夹(前缀)是自定义的不需要存在真实路径。
- 将想要的文件添加进去即可
- 再到样式表中就可添加资源了
信号与槽函数
- 普通的事件(单击、双击、松开等等,有现成的库函数)
- 举个例子↓ :fileButton_2是对象,clicked是单击事件,用connect连接槽函数,当单击事件响应时触发括号里的槽函数
self.fileButton_2.clicked.connect(self.open_file)
self.cameraButton_2.clicked.connect(self.chose_cam)
- 自定义信号
#信号定义
img = pyqtSignal(np.ndarray)
send_fps = pyqtSignal(str) # 这些都是信号 括号里代表当出现这种类型的参数时触发
#信号与槽连接
self.fps.connect(self.show_statistic) # connect槽函数
self.img.connect(lambda x: self.show_image(x, self.video)) # 无参数也要加lambda不然直接运行了
# 触发指令
self.img.emit(im) # im是图像对象
self.fps.emit('30')
ui界面设计文件转化到.py文件
- 终端键入pyuic5 -o demo.py demo.ui
#例子 pyuic5 -o win2.py win2.0.ui
-
当然还有其他方法比如利用externaltool感兴趣可以搜一下。
-
坑点:“: /”是资源文件的写法,需要将qrc转为py文件看下面,按照我的方法不会出现文件显示不出的现象)还有一种写法就是直接填绝对路径或者相对路径但是这种方法打包起来还要把文件包含进去不推荐。
qrc资源文件转化为.py文件(主要是方便后续打包)
- 这部操作是为了把qrc转化成二进制文件,这样就不用在打包的时候包含图片了。
- 终端键入 pyrcc5 resource.qrc -o resource_rc.py (后面有_rc是因为.ui转.py时导入的包后缀是 _rc)
#例子 pyrcc5 apprcc.qrc -o apprcc_rc.py
- warning : 有pyside2转py文件千万不要 用这个 pyuic和pyrcc5这是pyqt5自带的原装的 pyside2好像是pyqt6的反正不兼容,我这搞了半天。
多进程设计
class DetThread(QThread): #创建多进程类继承QTread
def __init__(self):
super().__init__()
def run(): #运行多进程
self.det_thread = DetThread() #创建进程对象
self.det_thread.start() #.start开始运行类中给run函数
pyinstaller打包
-
多文件、多进程一定要用spec文件来打包
-
生成.spec文件 pyi-makespec 打包.py
# 例子 pyi-makespec main.py
-
在spec文件中添加文件和文件夹
-
直接终端 pyinstaller 打包.spec 不要加-F -W啥的都是坑
# 例子 pyinstaller main.spec
- 打包的时候最好把终端打开 在spec文件中console设置为True用以调试。我真的 我这里卡了两天。(血泪)