Qt for Python: Pycharm搭建+QtDesigner搭配使用+Pyinstaller编译可执行文件

一.  搭建篇

1.   Python 安装

    1) Python3.8.2 下载 安装

        https://www.python.org/downloads/release/python-382/

    Note: 安装路径要记录好, 后续PyCharm/QtCreator配置Python版本的时候需要用到

2.   Pycharm安装

    1) PyCharm下载

        https://www.jetbrains.com/pycharm/download/#section=windows

    2) 安装

        下载好的pycharm进行安装,也就是不断下一步, 至于长久使用方法, 各自本事

    3) 添加python版本支持

        也就是pycharm在编译的时候选择python的版本, 不同python版本按照的模块支持不一样, 也就是决定了最终编译的有效性

        ① Pycharm -> File -> Settings -> Project: xxx(xxx是自己创建的工程名字)-> Project Interpreter, 配置如图1;

扫描二维码关注公众号,回复: 11323652 查看本文章

        ② 选择完成之后点击 “OK”, 如图2;

        ③ 点击“Apply” 应用功能, 如图3

                                                                                    图1. Python选择

                                                                                    图2. Python选择确认

                                                                                    图3. 选择环境信息

3.   PySide2 安装

    1) 管理员方式运行powershell;

    2) 使用pip3 非使用 pip

    3) 指令

        pip3 install -i  https://pypi.tuna.tsinghua.edu.cn/simple pyside2 

       Note: 安装过程报错, 按照报错提示升级一下pip 再重新执行一下 (3)

    4) 安装pyside2之后可配置QtCreator搭配Qt forPython使用

        https://blog.csdn.net/halo_hsuh/article/details/106030201

    5) 打开Pycharm, 再回看2步骤中就会看到PySide2模块了, 如图3

4.   QtDesigner使用

    在安装的Pyside2目录下即包含了Qt工具 designer.exe 和 linguist.exe, 如图4

    QtDesigner 搭配 python 使用, 将更加快编程速度

    1) 打开”designer.exe”

    2) 新建窗体

    3) 编辑UI

        ① 拉两个 QLabel显示 名字 和 年龄, 一个QPushButton触发事件

        ② 另存为 例如(ui_mainwindow.ui)

    4) Ui文件转为python文件

        pyside2-uic.exe ui_mainwindow.ui > ui_mainwindow.py # 将ui文件转化成python代码

   ui_mainwindow.py         

# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'ui_mainwindow.ui'
##
## Created by: Qt User Interface Compiler version 5.14.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide2.QtCore import (QCoreApplication, QDate, QDateTime, QMetaObject,
    QObject, QPoint, QRect, QSize, QTime, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
    QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter,
    QPixmap, QRadialGradient)
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(808, 368)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(330, 30, 72, 15))
        self.label.setAlignment(Qt.AlignCenter)
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setGeometry(QRect(330, 60, 72, 15))
        self.label_2.setAlignment(Qt.AlignCenter)
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(340, 280, 93, 28))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 808, 26))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.label.setText(QCoreApplication.translate("MainWindow", u"Name", None))
        self.label_2.setText(QCoreApplication.translate("MainWindow", u"Age", None))
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"Click", None))
    # retranslateUi

         

    5) 使用

         ① 创建工程

         ② 将 4(上一步)生成的代码 拷贝到当前工程目录

         ③ 创建main.py文件

         

         ④ 调用UI代码

main.py

import sys
import random
from PySide2 import QtGui, QtWidgets, QtCore
from PySide2.QtWidgets import QApplication, QMainWindow
from ui_mainwindow import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

         ⑤ 第一次运行

         ⑥ 效果

二.  编译篇

1. Python 交叉编译

    1)  编译交叉编译工具;

    2)  直接不同平台安装;

2. 编译可执行程序

    1) 安装 pyinstaller

        pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

    2) 指令生成执行程序(Windows下生成exe)

        pyinstaller -F -w main.py

三.  参考

浅尝Qt for Python - https://blog.csdn.net/halo_hsuh/article/details/106030201

Python爱好者的Qt入门手册 - https://gitee.com/se7enXF/pyside2/tree/master

PyInstaller – 按照和更新 http://www.pyinstaller.org/downloads.html

                  – 文档 https://pyinstaller.readthedocs.io/en/stable/usage.html

猜你喜欢

转载自blog.csdn.net/halo_hsuh/article/details/106124339