PyQt打包成EXE后,无法打开,怎么解决?
本帖最后由 wnhuiyou 于 2020-9-25 13:41 编辑我在做一个小程序,通过pycharm来运行的时候,是没有问题的,但是通过pyinstaller -F -w xxx.py 命令来打包EXE的时候就出现错误,奇怪的是,我在另外一个小测试中打包EXE却可以正常打开,我先把代码贴出来,是哪里出问题了吗?
这是 tp.py
from PyQt5.Qt import *
import sys
import os
import time
from QT.投屏.tp2 import QpixmapDemo
class TP(QWidget):
# 开始
def TKS(self, rr):
self.rr = rr
# 发送adb连接命令
a = 'adb connect ' + self.rr
# 启动安卓界面
s = 'scrcpy.exe'
os.popen(a, 'r')
time.sleep(1)
os.popen(s, 'r')
# 关闭
def TGB(self):
c = 'adb disconnect 192.168.0.132:5555'
os.popen(c, 'r')
# 当程序关闭时,再次调用 关闭 函数
def closeEvent(self, event):
self.TGB()
if __name__ == '__main__':
a = 'adb connect 192.168.0.132:5555'
os.popen(a, 'r')
app = QApplication(sys.argv)
win = TP()
win.setWindowTitle("安卓桌面")
win.resize(300, 200)
btn = QPushButton(win)
btn.setText("开始")
btn.setStyleSheet("font:40px")
btn.resize(100, 50)
btn.move(50, 50)
btn.clicked.connect(lambda: win.TKS('192.168.0.132:5555'))
btn2 = QPushButton(win)
btn2.setText("关闭")
btn2.setStyleSheet("font:40px")
btn2.resize(100, 50)
btn2.move(150, 50)
btn2.clicked.connect(win.TGB)
ti = QpixmapDemo()
btn3 = QPushButton(win)
btn3.setText("帮助")
btn3.setStyleSheet("font:40px")
btn3.resize(100, 50)
btn3.move(50, 100)
btn3.clicked.connect(ti.show)
win.show()
sys.exit(app.exec_())
这是调用另外一个界面 tp2.py
# from PyQt5.QtGui import *
# from PyQt5.QtWidgets import *
from PyQt5.Qt import *
class QpixmapDemo(QWidget):
def __init__(self, parent=None):
super(QpixmapDemo, self).__init__(parent)
self.setWindowTitle('快捷键')
layout = QVBoxLayout()
lab1 = QLabel()
lab1.setPixmap(QPixmap('1.png'))
layout.addWidget(lab1)
self.setLayout(layout)
# if __name__ == '__main__':
# app = QApplication(sys.argv)
# demo = QpixmapDemo()
# demo.show()
# sys.exit(app.exec_())
用pycharm执行是没有问题的,如下:
打包后就提示这个问题:
我把所有文件的路径也截图出来:
是什么问题导致打包后不能正常打开的呀? 我也是百度了好久,说是路径问题,或者是什么编码问题,我都试过了,还是不行。
用了你的代码,第一段放在test01,第二段放在test02
pyinstaller -F test01.py test02.py
pyinstaller test01.py test02.py
上面两种都可以正常打包,正常执行exe
所以你的问题,可能是你使用了os调用cmd来执行代码,但是打包时又不使用控制台? 疾风怪盗 发表于 2020-9-25 14:17
用了你的代码,第一段放在test01,第二段放在test02
pyinstaller -F test01.py test02.py
pyinstaller tes ...
我现在把 两个文件合并成一个文件了 可以正常打包 但还是无法正常执行EXE文件提示如下:
打包是用控制台的:
wnhuiyou 发表于 2020-9-25 14:37
我现在把 两个文件合并成一个文件了 可以正常打包 但还是无法正常执行EXE文件提示如下:
你把合并后的代码发一下
我刚用你的两段代码打包后是能正常运行的
打包时-w是不使用控制台
你什么参数都不加,默认打包呢?也不能运行么? 疾风怪盗 发表于 2020-9-25 14:43
你把合并后的代码发一下
我刚用你的两段代码打包后是能正常运行的
合并的代码:
import os
import sys
import time
from PyQt5.Qt import QWidget, QApplication
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QPushButton, QVBoxLayout, QLabel
class TP(QWidget):
# 开始
def TKS(self, rr):
self.rr = rr
# 发送adb连接命令
a = 'adb connect ' + self.rr
# 启动安卓界面
s = 'scrcpy.exe'
os.popen(a, 'r')
time.sleep(1)
os.popen(s, 'r')
# 关闭
def TGB(self):
c = 'adb disconnect 192.168.0.132:5555'
os.popen(c, 'r')
# 当程序关闭时,再次调用 关闭 函数
def closeEvent(self, event):
self.TGB()
class QpixmapDemo(QWidget):
def __init__(self, parent=None):
super(QpixmapDemo, self).__init__(parent)
self.setWindowTitle('快捷键')
layout = QVBoxLayout()
lab1 = QLabel()
lab1.setPixmap(QPixmap('1.png'))
layout.addWidget(lab1)
self.setLayout(layout)
if __name__ == '__main__':
a = 'adb connect 192.168.0.132:5555'
os.popen(a, 'r')
app = QApplication(sys.argv)
win = TP()
win.setWindowTitle("安卓桌面")
win.resize(300, 200)
btn = QPushButton(win)
btn.setText("开始")
btn.setStyleSheet("font:40px")
btn.resize(100, 50)
btn.move(50, 50)
btn.clicked.connect(lambda: win.TKS('192.168.0.132:5555'))
btn2 = QPushButton(win)
btn2.setText("关闭")
btn2.setStyleSheet("font:40px")
btn2.resize(100, 50)
btn2.move(150, 50)
btn2.clicked.connect(win.TGB)
ti = QpixmapDemo()
btn3 = QPushButton(win)
btn3.setText("帮助")
btn3.setStyleSheet("font:40px")
btn3.resize(100, 50)
btn3.move(50, 100)
btn3.clicked.connect(ti.show)
win.show()
sys.exit(app.exec_())
我就只加了 -F -w 没有其他的了,我现在试试 什么参数都不加看看。 wnhuiyou 发表于 2020-9-25 14:44
合并的代码:
那你说打包用了控制台,-w就是不使用控制台的意思,去掉这个参数试试
你没看懂我在2楼回复说的意思啊 本帖最后由 wnhuiyou 于 2020-9-25 16:35 编辑
疾风怪盗 发表于 2020-9-25 14:43
你把合并后的代码发一下
我刚用你的两段代码打包后是能正常运行的
奇怪,不带参数打包,可以正常执行,但是会附带一大堆文件,不知道哪些是没用的,哪些是有用的,而且我不需要带有后台提示,只需要窗口就行了。
疾风怪盗 发表于 2020-9-25 14:46
那你说打包用了控制台,-w就是不使用控制台的意思,去掉这个参数试试
你没看懂我在2楼回复说的意思啊
这张图就是不带 -w打包的,黑框一闪而过,我能截图是因为我手速快...
wnhuiyou 发表于 2020-9-25 14:51
这张图就是不带 -w打包的,黑框一闪而过,我能截图是因为我手速快...
不需要拼手速,在文件的路径下cmd,和cd到文件的效果一样,然后再输入exe文件运行,就能看到报错信息
但是你代码里不是用了cmd来调用参数么?不使用控制台?
打包exe代码:(文件名不能有空格)
-F:打包后只生成单个exe格式文件,适用于小程序,启动速度较慢;
-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件,启动速度快;
-c:默认选项,使用控制台(就是类似cmd的黑框);
-w:不使用控制台;
-p:添加搜索路径,让其找到对应的库;
-i:改变生成程序的icon图标。
疾风怪盗 发表于 2020-9-25 14:46
那你说打包用了控制台,-w就是不使用控制台的意思,去掉这个参数试试
你没看懂我在2楼回复说的意思啊
还想请教你一个问题,为什么直接用pycharm去运行,程序启动很快, 但是生产EXE后,去执行,打开好慢呀。。 疾风怪盗 发表于 2020-9-25 14:57
不需要拼手速,在文件的路径下cmd,和cd到文件的效果一样,然后再输入exe文件运行,就能看到报错信息
...
对,是用CMD调用参数,难道一定要带有控制台显示? 有没有其他办法可以不显示控制台? wnhuiyou 发表于 2020-9-25 14:58
还想请教你一个问题,为什么直接用pycharm去运行,程序启动很快, 但是生产EXE后,去执行,打开好慢呀 ...
你把代码中的os.popen(a, 'r')全部注释掉,然后用-F -w来打包试试,我尝试了下,没有控制台,能正常运行你的窗口界面,所以,就是因为你代码用了cmd,但是又不要控制台打包,引起的问题
启动速度,不知道,python打包后就是这样的,启动速度慢
如果要快一点,可以用-D产生大量文件的方式打包,会稍微快一点 疾风怪盗 发表于 2020-9-25 15:02
你把代码中的os.popen(a, 'r')全部注释掉,然后用-F -w来打包试试,我尝试了下,没有控制台,能正常运 ...
还真的是,看来只能带控制台了,真的非常感谢你!!!谢谢!
上图生成的那一大堆文件,一个都不能删除吗? 我想简单一点做个压缩包 到时候给我同事直接解压缩就可以了,但是文件太多了。
最后在请教一个问题,我做这个小程序,前提是要配好 adb环境我尝试用批处理去 新增 path 可以成功,但是基于我这段代码 要怎么写呢? 疾风怪盗 发表于 2020-9-25 15:02
你把代码中的os.popen(a, 'r')全部注释掉,然后用-F -w来打包试试,我尝试了下,没有控制台,能正常运 ...
发现了一个BUG,就是 帮助 这个按钮我是做了一个新窗口 来把一些快捷键的信息图片展示出来
现在我一点 就成这样了什么情况 放大也是什么都没有
你百度一下应该就有,我笔记里就这段代码,但是没实际用过,可以试试看
import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'#注意修改你的路径
不要控制台的方法,我是不知道,你也可以网上找找看
生成的文件不要删,都是有用的吧,你可以把文件都放在D盘,做一个exe的快捷方式放桌面,不就看不到这么多文件了么 本帖最后由 疾风怪盗 于 2020-9-25 15:24 编辑
wnhuiyou 发表于 2020-9-25 15:13
发现了一个BUG,就是 帮助 这个按钮我是做了一个新窗口 来把一些快捷键的信息图片展示出来
现在我一点 ...
对了,你的图片没有放到exe同级目录吧?因为你写的是相对路径 疾风怪盗 发表于 2020-9-25 15:19
对了,你的图片没有放到exe同级目录吧?因为你写的是相对路径
{:5_95:}是的,我把图片放到同级目录就好了,谢谢你! 爱你! 可以添加你为好友吗?
不过我有个疑问,为什么打包的时候不自动打包过去? wnhuiyou 发表于 2020-9-25 15:32
是的,我把图片放到同级目录就好了,谢谢你! 爱你! 可以添加你为好友吗?
打包是不会打包图片资源的,所以我一般专门一个source文件夹,所有用到的图片什么都放进去,然后再放到打包好的文件夹里,这样也不会乱,容易找到 疾风怪盗 发表于 2020-9-25 15:40
打包是不会打包图片资源的,所以我一般专门一个source文件夹,所有用到的图片什么都放进去,然后再放到打 ...
再请教一个问题,我启动后,原本点击 投屏的窗口 然后键盘上按组合键 比如 ATL + F是全屏我想把他做成按钮式 在 帮助 按钮旁边我该怎么发送组合快捷键呀?
页:
[1]