使用py转exe,含PyQt5界面
参考:
大部分资料取自此处,跳转以下网页
https://blog.****.net/shuduaa/article/details/80648447
https://blog.****.net/yuhijk2055/article/details/80876970
感谢作者的分享!!!!
解决,关于pyqt5转成exe后出问题的情况。
一、QTdesigner生成界面
新建:gui.py
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(759, 436)
MainWindow.setToolTip("")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(110, 100, 521, 71))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(110, 240, 521, 71))
self.pushButton_2.setObjectName("pushButton_2")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 759, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "自动生成淘宝二维码图片"))
MainWindow.setStatusTip(_translate("MainWindow", "Writen by Li-Bo"))
self.pushButton.setText(_translate("MainWindow", "点击生成当天销量排行"))
self.pushButton_2.setText(_translate("MainWindow", "点击生成两小时销量排行"))
二、调用界面
新建:test.py
注意:要import 上述的界面文件
# -*- coding: utf-8 -*-
#
#根据需要import 相应生成的界面
#
import gui
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow
Ui_MainWindow = gui.Ui_MainWindow
class MyApp(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
self.setupUi(self)
self.createButtons()
def get_top_day_goods(self):
with open("top_day.txt", "w") as f:
for index in range(100):
f.write(str(index)+ "\n")
def get_top_hour_goods(self):
with open("top_hours.txt", "w") as f:
for index2 in range(100):
f.write(str(index2) + "\n")
def createButtons(self):
self.pushButton.clicked.connect(self.get_top_day_goods)
self.pushButton_2.clicked.connect(self.get_top_hour_goods)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
三、打包发布EXE程序
方法(1)终端直接输入:
cd到指定目录后,执行以下命令:
pyinstaller -F -w --paths=G:\program\python37\Lib\site-packages\PyQt5\Qt\bin --paths=G:\program\python37\Lib\site-packages\PyQt5\Qt\plugins test.py
pyinstaller -F -w --paths=地址\plugins --paths=地址\bin 文件名.py
注意:本文中用到了PyQt5作为界面,因此打包时要添加–paths来指定PyQt5的路径(ps:你要针对自己的安装路径进行修改):
--paths=G:\program\python37\Lib\site-packages\PyQt5\Qt\plugins
--paths=G:\program\python37\Lib\site-packages\PyQt5\Qt\bin
py转exe方法:https://blog.****.net/qq_33431972/article/details/87970503
方法(2)写一个文件,让它自动执行
新建:py2exe.py
# -\- coding: utf-8 -\-
# -F:打包成一个EXE文件
# -w:不带console输出控制台,window窗体格式
# --paths:依赖包路径
# --icon:图标
# --noupx:不用upx压缩
# --clean:清理掉临时文件
from PyInstaller.__main__ import run
if __name__ == '__main__':
opts = ['-F',
'-w',
'--paths=G:/program/python37/Lib/site-packages/PyQt5/Qt/bin',
'--paths=G:\program\python37\Lib\site-packages\PyQt5\Qt\plugins',
'--noupx',
'--clean',
'test.py']
run(opts)
终端运行:python py2exe.py
四、运行exe
运行py文件路径下的dist,找到test.exe
运行成功,如下图。