2019独角兽企业重金招聘Python工程师标准>>>

首先声明我的开发环境是windows+anconda,pyqt使用的是anconda自带的,没有单独再安装pyqt,下面上pyqt的代码,具体怎么实现就不研究了,我们这里只研究下怎么使用pyinstaller打包这个程序

import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QFont,QIcon#QtWidgets不包含QFont必须调用QtGui
from PyQt5 import QtGui,QtCore
import randomclass MessageBox(QtWidgets.QWidget):#继承自父类QtWidgets.QWidgetCloseAllowed=0def __init__(self,parent = None):#parent = None代表此QWidget属于最上层的窗口,也就是MainWindows.QtWidgets.QWidget.__init__(self)#因为继承关系,要对父类初始化
#通过super初始化父类,__init__()函数无self,若直接QtWidgets.QWidget.__init__(self),括号里是有self的self.setGeometry(300, 300, 800,800)  # setGeometry()方法完成两个功能--设置窗口在屏幕上的位置和设置窗口本身的大小。它的前两个参数是窗口在屏幕上的x和y坐标。后两个参数是窗口本身的宽和高#self.resize(1000, 500)  # 设置窗体大小,本行可有可无。self.center()#自定义一个居中的函数self.setFixedSize(self.width(),self.height());#PyQT禁止调整窗口大小和窗口最大化按钮#self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)#PyQT禁止窗口最大化按钮和关闭按钮self.setWindowTitle(u'追梦少年')  # 仅仅设置窗体标题,不设置位置。self.setWindowIcon(QIcon('rose.png'))  # 调用QIcon构造函数时,我们需要提供要显示的图标的路径(相对或绝对路径)。同时注意:使用QIcon类型必须导入此模块from PyQt5.QtGui import QIconself.setToolTip(u'追梦少年')#调用setToolTip()方法,该方法接受富文本格式的参数,css之类。QtWidgets.QToolTip.setFont(QFont('华文楷体', 10))#设置字体以及字体大小self.label1 = QtWidgets.QLabel(u'<b>小姐姐,观察你很久了!</b>', self)  # 建立一个标签self.label1.move(150, 40)  # 使此标签移动到这个部件(260,40)的位置self.label1.setFont(QFont("Timers", 20));#设置字体与字体大小self.label2= QtWidgets.QLabel(u'<b>做我女朋友好不好?</b>', self)  # 建立一个标签self.label2.move(150, 100)  # 使此标签移动到这个部件(260,100)的位置self.label2.setFont(QFont("Timers", 20));#设置字体与字体大小#Qt中提供的调色板QPalette类就是专门用于管理控件的外观显示。QPalette类相当于对话框或控件的调色板,管理着控件和窗体的所有颜色。#每个窗体和控件都包含一个QPalette对象,在显示时,对其做相应的设置即可self.window_pale = QtGui.QPalette()#实例化QPalette类self.window_pale.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap(r"biu.jpg")))#打开图片self.setPalette(self.window_pale)#应用背景色# setStyleSheet来设置图形界面的外观self.buttonOK = QtWidgets.QPushButton(u'同意',self)  # 因为需要增加按钮,所以我们引入了QPushButton类,该按钮是QPushButton类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是示例窗口小部件,它是通过QWidget继承的self.buttonOK.setFocusPolicy(QtCore.Qt.NoFocus)#按钮无焦点# Qt::TabFocus 0x1  接受Tab键焦点# Qt::ClickFocus 0x2 接受鼠标单击做焦点# Qt::StrongFocus TabFocus | ClickFocus | 0x8 接受Tab键和鼠标单击做焦点# Qt::WheelFocus StrongFocus | 0x4  滑轮作为焦点选中事件# Qt::NoFocus 0 不接受焦点self.buttonOK.move(50, 700)  # move()方法来指定部件的放置坐标,坐标的顶点就是窗口的左上角self.buttonOK.clicked.connect(self.showDialogOK)self.buttonE = QtWidgets.QPushButton(u'考虑考虑',self)  # 因为需要增加按钮,所以我们引入了QPushButton类,该按钮是QPushButton类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是示例窗口小部件,它是通过QWidget继承的self.buttonE.setFocusPolicy(QtCore.Qt.NoFocus)  # 按钮无焦点# Qt::TabFocus 0x1  接受Tab键焦点# Qt::ClickFocus 0x2 接受鼠标单击做焦点# Qt::StrongFocus TabFocus | ClickFocus | 0x8 接受Tab键和鼠标单击做焦点# Qt::WheelFocus StrongFocus | 0x4  滑轮作为焦点选中事件# Qt::NoFocus 0 不接受焦点self.buttonE.move(330, 700)  # move()方法来指定部件的放置坐标,坐标的顶点就是窗口的左上角self.buttonE.clicked.connect(self.showDialogEE)self.buttonNO = QtWidgets.QPushButton(u'拒绝',self)  # 因为需要增加按钮,所以我们引入了QPushButton类,该按钮是QPushButton类的一个实例。构造函数的第一个参数是按钮的标签。第二个参数是父窗口小部件。父窗口小部件是示例窗口小部件,它是通过QWidget继承的self.buttonNO.setFocusPolicy(QtCore.Qt.NoFocus)  # 按钮无焦点# Qt::TabFocus 0x1  接受Tab键焦点# Qt::ClickFocus 0x2 接受鼠标单击做焦点# Qt::StrongFocus TabFocus | ClickFocus | 0x8 接受Tab键和鼠标单击做焦点# Qt::WheelFocus StrongFocus | 0x4  滑轮作为焦点选中事件# Qt::NoFocus 0 不接受焦点self.buttonNO.move(610, 700)  # move()方法来指定部件的放置坐标,坐标的顶点就是窗口的左上角self.buttonNO.clicked.connect(self.showDialogNO)def showDialogOK(self):QtWidgets.QMessageBox.information(self, "欧耶", "爱你,么么么么么么么哒~~~", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information (self, "欧耶", "余生请许太太多多指教~~~", QtWidgets.QMessageBox.Ok)self.CloseAllowed = 1def showDialogEE(self):QtWidgets.QMessageBox.information(self, "别纠结了", "你完了,你妈让你嫁给我", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "你爸也是这么说的", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "你奶奶也让你嫁给我", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "你哥哥也同意了,你全家都同意", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "你闺蜜说嫁给我没错", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "你爸说不同意就打你", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "接受现实吧,我会对你好的", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "你都是我的人了", QtWidgets.QMessageBox.Ok)QtWidgets.QMessageBox.information(self, "别纠结了", "我发誓我会一辈子只爱你", QtWidgets.QMessageBox.Ok)def showDialogNO(self):self.q = random.randint(0, 650)  # 在0-650内生成随机的X坐标self.w = random.randint(150, 650)  # 在150-650内生成随机的Y坐标self.buttonNO.move(self.q, self.w)#enterEvent事件PyQt自动运行,无需调用# def enterEvent(self,event):#重写了鼠标的enterEvent事件,由于继承了窗口类,鼠标一进入主窗口便会出发此函数#     self.q=random.randint(0,650)#在0-650内生成随机的X坐标#     self.w=random.randint(150,650)#在150-650内生成随机的Y坐标#     self.buttonNO.move(self.q,self.w)#当我们关闭一个窗口时,在PyQt中就会触发一个QCloseEvent的事件,正常情况下会直接关闭这个窗口,
#但是我们不希望这样的事情发生,所以我们需要重新定义QCloseEvent,函数名称为closeEvent不可变def closeEvent(self,event):#函数名固定不可变if self.CloseAllowed==1:event.accept()#关闭窗口else:QtWidgets.QMessageBox.information(self, "未作回应", "小姐姐,请不要逃避!", QtWidgets.QMessageBox.Ok)event.ignore()#忽视点击X事件def center(self):screen=QtWidgets.QDesktopWidget().screenGeometry()#获取屏幕分辨率
#QtWidgets.QDesktopWidget().screenGeometry()中QDesktopWidget()也有括号size=self.geometry()#获取窗口尺寸self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)#利用move函数窗口居中app=QtWidgets.QApplication(sys.argv)
window=MessageBox()
window.show()
sys.exit(app.exec_())

注意:里面有一张图片是biu.png,要和次代码放在同一个目录下,如果不是同一个目录需要修改此处的路径,图片如下:

  1. 安装pyinstaller
pip install pyinstaller
  1. 查看安装结果,运行命令
pyinstaller --version

显示版本号 则证明安装成功

  1. 我的电脑右键--属性--高级--环境变量 在系统变量中 新建一个 名称为 QT_QPA_PLATFORM_PLUGIN_PATH 的环境变量,值为C:\ProgramData\Anaconda3\Library\plugins\platforms

这是以我本地环境为例子的,如果你目录和我不同请注意修改,并且找到platforms所在的目录,加入环境变量中

注意:必须将加入该环境变量,否则打包后的程序执行时候报错

This application failed start because it could not find or load the Qt platform plugin "windows in

  1. 执行打包命令
pyinstaller -F -w demo.py

-F:打包为单文件

-w:Windows程序,不显示命令行窗口,但是如果程序有命令行输入或输出,不要带此项参数!

demo.py:要打包成exe文件的脚本文件

执行完之后,发现在当前目录下生成了两个新目录:build、dist以及一个文件:demo.spec,demo.spec都是pyinstaller在打包过程中产生的中间文件,而dist目录中则可以看到生成了一个名为demo.exe的可执行文件,但是直接双击该程序会发现,程序中的背景图片没有显示,我们将C:\ProgramData\Anaconda3\Library\plugins目录中的imageformats文件夹拷贝至dist目录中,再次双击就可正常运行了

感谢北京图灵学院老师的支持与帮助,感谢!!!! 官网 http://www.tulingxueyuan.com/ 交流QQ群 246519056

转载于:https://my.oschina.net/u/3273360/blog/1845382

使用pyinstaller打包pyqt程序相关推荐

  1. 【Python打包】Windows下使用Pyinstaller打包pyqt程序遇到的问题记录

    注意:为兼容64位与32位系统,Python安装包.第三方库.操作系统,均需要安装32位,经测试Windows7专业版32位打包,对Widnows Xp.7.8.10,兼容性最好 打包常见问题: 1. ...

  2. pyinstaller打包pyqt文件(转)

    pyinstaller打包pyqt文件 https://www.cnblogs.com/dcb3688/p/4211390.html 打包pyqt文件 如何将pyqt生成exe的二进制文件呢,pyin ...

  3. pyinstaller打包exe程序教程推荐及需要注意的点

    Python PyInstaller安装和使用教程(详解版) http://c.biancheng.net/view/2690.html 1.pyinstaller打包程序中出错是正常的,报错要注意看 ...

  4. pyinstaller打包python程序的常见问题

    使用pyinstaller打包python程序时遇到的问题记录,问题已全部解决. 解决方法详见 https://guangmujun.cn/archives/168 shapely库相关 问题: Un ...

  5. Anaconda使用pyinstaller打包exe程序体积过大

    现象 使用的是Anaconda进行包管理,由于pyinstaller默认使用系统python环境变量来打包的,因此如果系统使用的python环境安装了太多的包,会导致最终输出的exe程序太大了,达到2 ...

  6. python打包成exe fail to ex_“failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误...

    在使用PyInstaller打包python程序,打包命令为: pyinstaller -F -w -i manage.ico yourpyfile.py 顺便说一下几个参数的作用 -F:是直接生成单 ...

  7. pyinstaller打包exe程序闪退问题修复

    pyinstaller打包exe程序,点击程序,闪退,问题原因: pyinstaller版本过低 升级 pip install --upgrade pyinstaller pyinstaller从4. ...

  8. exe打包工具_pyqt5快速上手基础篇12-使用Pyinstaller打包应用程序

    前言 本节我们学习如何使用Pyinstaller打包pyqt5应用程序,pyqt5的打包要比之前文章中讲述的tkinter的打包稍微复杂点,主要区别在于pyqt5打包需要导入Qt相关库,笔者开始打包时 ...

  9. [python学习笔记] pyinstaller打包pyqt5程序无法运行

    问题 pyinstaller打包的pyqt5程序在部分电脑上会失败.用户截图提示下边错误日志 无法定位程序输入点 ucrtbase.terminate 于动态链接库 api-ms-win-crt-ru ...

最新文章

  1. uboot中IDE移植
  2. 取消项目git_git取消文件跟踪
  3. 数据可视化应用案例:从面积到人口,再到经济、房贷等等方面透析重庆市
  4. 基础教程推荐:跟微软大咖学BI
  5. STL 二分查找 upper_bound和lower_bound用法
  6. P1401 城市(30分,正解网络流)
  7. python qt5 数据改变 触发信号_pyqt5 使用 QTimer, QThread, pyqtSignal 实现自动执行,多线程,自定义信号触发。...
  8. nginx lua获取客户端ip
  9. C#常见错误解决方法
  10. 如何通过jQuery动态设置元素CSS的样式,以及HTML中CSS “内联式”、“嵌套式”、“外联式”使用方法
  11. Sublime Merge简单使用教程
  12. 斐讯k2路由器刷固件一条龙——从小白到大神
  13. python selenium 的使用——alibaba询盘
  14. MongoDB可视化工具之Studio 3T的使用
  15. Python_001_旅游评论情感倾向性分析
  16. 记忆存储程序使得计算机能够实现,2016年职称计算机考试模块综合试题及答案(4)...
  17. ArcGIS API for JavaScript创建 3D 地图
  18. android手机几个目录的介绍:/system/app; /system/vender;/data/app;/data/dalvik-cache;/mnt/asec;/mnt/secure
  19. CNN卷积神经网络原理与公式讲解
  20. 远程答题平台的使用方法

热门文章

  1. 查看ORACLE 下所有信息
  2. 30个数据可视化超级工具_Python5个数据可视化工具
  3. 妇产科2020年发表的SCI论文大数据分析
  4. 解决浏览器下载excel文件时显示“文件已损坏”
  5. visual stdio里面怎么取消空格补全?
  6. 计算机视觉与深度学习 | SLAM之傻瓜书《 SLAM for Dummies》
  7. Qt学习(七):定时器QTimer
  8. 个人开发者 android内购,【开发者账号】关于内购,协议税务的一些坑
  9. java循环基础知识_Java基础知识·循环语句
  10. PyTorch随笔-5