在pyqt5中使用进程process后,打包出现的错误

背景

创建了一个pyqt5的界面,并且使用按钮去调用另一个flask的程序。
在这里插入图片描述
在这里插入图片描述
我的flask文件名字叫fapp.py,这里用app.run(host='0.0.0.0', debug=True, port=5000)调试中也会弹出另一个窗口,并且程序不会执行!
于是用了os库的方法,执行system("python fapp.py")就可以。后来又改用fapp.main()的方法启动flask,这里的fapp.py删去了if __name__ == '__main__':
在这里插入图片描述
以上两种方法调试都无报错

错误的方法

开始是打算使用multiprocessing的进程Process,在调试代码中运行无错误,但是打包后会重新运行一遍窗口,而且也并未执行进程中的程序!

这是调试中的:
在这里插入图片描述
打包后执行的:
在这里插入图片描述
(点击开启后,会弹出另一个原本的窗口。一直点开始就会一直循环。并且进程中的程序不执行!我也尝试使用线程守护,然并软)

正确方法

首先Flask框架是需要在主线程中运行,我尝试过用子线程去运行,但是会报错,说我flask需要在主线程中执行。因为pyqt本身也是一个程序,也是需要在主线程中执行,所以两者冲突,不能使用Thread线程去使用。


正片开始!所以以上我都是用multiprocessing的进程Process去运行。但打包后出问题。查阅了很多资料,是不是multiprocessing的进程问题。最终我发现QT本身就有线程和进程的使用方法!!!QProcess()!!!
QtCore 是PyQt5下面的一个模块,QtCore模块涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及到的 time、文件、目录、数据类型、文本流、链接、mime、线程或进程等对象。
https://www.pythonguis.com/tutorials/qprocess-external-programs/

可以使用python xxx.py程序,但我一身反骨,偏不!
我将fapp.py也打包成exe程序,直接运行fapp.exe
这里改成了fapp.exe程序,所以程序里要有if __name__ == '__main__':
在这里插入图片描述
self.process=QProcess()写在qt 的init里了。而按钮start()函数就是执行另一个进程self.process.start("fapp.exe")
而那个self.process.started.connect(pro1)是类似生命周期那样的,程序开启完后执行,我这里的pro1是打印的print(启动成功)。
OK,在调试中没问题,接下来打包,也没问题!
对了,记得把fapp.exe放在main.exe的同目录下,才能执行进程
在这里插入图片描述
接下来,就是该改图标改图标,该改名字改名字,O了

最后

不懂的在发评论问问吧

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值