小言_互联网的博客

【网络教程】快速入手pysidi2(pyqt5),如何使用pyside2制作第一个图形界面&打包生成exe文件(包含如何解决错误:This application failed to start )!

380人阅读  评论(0)


安装

  • 安装代码
    pip install pyside2

  • 也可以更换源进行下载(速度可能更快)
    `使用豆瓣源下载安装:

pip install pyside2 -i https://pypi.douban.com/simple/`

Qt Designer

  • Qt Designer是一个图形设计界面;Windows下,运行 Python安装目录下 Scripts\pyside2-designer.exe 这个可执行文件即可启动Qt Designer
    img.png
  • 如果您使用的是Anaconda3,可以在\Anaconda3\Lib\site-packages\PySide2\designer.exe找到!

解决错误

  • 有些朋友可能在运行pyside2相关程序的时候会出现下图所示的错误:
  • 遇到这个问题,只需在电脑中添加一个环境变量即可
  • PySide2路径下的plugins\platforms添加到系统环境变量中用户变量里。我的路径如下:D:\Python_Apps\Anaconda\Lib\site-packages\PySide2\plugins\platforms
  • 设置完成,记得点击 【确定】且需要 【重启电脑】!

动态加载UI文件

  • 在使用Qt Designer生成ui文件后,我们可以使用以下代码作为模板来实现**动态加载UI文件**,并且动态 创建一个相应的窗口对象
# !/usr/bin python3                                 
# encoding    : utf-8 -*-                            
# @wechat公众号: xiaoqiangclub                               
# @software   : PyCharm      
# @file       :   main.py
# @Time       :   2021/4/19 21:06

from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtGui import QIcon


class MyWindow:

    def __init__(self):
        # 从文件中加载UI定义
        self.ui = QUiLoader().load('ui_file_from_Qt_Designer.ui')
        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 比如 self.ui.button , self.ui.textEdit
        # 注意:里面的控件对象也成为窗口对象的属性了
        self.ui.button.clicked.connect(self.handleCalc)

    def handleCalc(self):
        print("点击按钮···")


if __name__ == '__main__':
    app = QApplication([])
    # 给图形界面左上角添加LOGO图片
    app.setWindowIcon(QIcon('logo.png'))
    window = MyWindow()
    window.ui.show()
    app.exec_()
  • 有了上面这个模板,我们只需要放开的在 Qt Designer 上进行图形设计即可!

程序打包exe

  • 使用pyinstaller进行打包
  • 命令`pyinstaller -i 程序图标路径 -F 程序入口文件地址 -w --hidden-import PySide2.QtXml
    • 其中--hidden-import PySide2.QtXml必须添加:因为这个 QtXml库是动态导入,PyInstaller没法分析出来,需要我们告诉它!
    • 添加-w代表生成一个不带cmd命令窗口的软件
  • 更多内容

转载:https://blog.csdn.net/xiaoqiangclub/article/details/116040278
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场