本文路老师准备去玩玩pyqt6的功能,我会用大概二十天的时间玩转pyqt6,并制作出来好玩又实用的项目。


 1 介绍

PyQt6是由Riverbank Computing公司开发的基于Python的一系列多平台的工具包,可以在UNIX、Windows和mac等主流操作系统上运行。本文着重来尝试使用pyqt6,以及未来利用pyqt6来实现一些有意思的桌面应用。比如开发画图板,截图工具,视频音频播放器,以及利用PyQt6来进行科学研究结果的展示。

2 安装PyQt6

安装PyQt6之前需要保证你已经安装了python环境,然后利用python包管理工具pip进行安装pyqt6:

pip install pyqt6
  • 1.

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pyqt6

PyQt6设计图形界面程序有两种基本方式。

  1. 在PyQt6安装后,采用Python自带或者第三方提供的IDLE开发PyQt6的程序。
  2. 在PyQt6安装后,再安装配套的工具包QtTools,通过其包含的Qt Designer可视化工具设计功能界面形成UI文件,将其转换为py文件,再编译实现功能的代码,与界面程序一起配合运行,或者直接修改UI文件,转换为py文件,加入实现功能的代码。(我们开发推荐使用这一种)

首先我们先尝试直接利用第一种方式编写程序来实现一个计算圆面积和周长的程序。效果如下:

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pyinstaller_02

下面是实现代码

import math
import sys

from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QWidget, QApplication


class Ui_Form(QWidget):
    def __init__(self):
        super(Ui_Form, self).__init__()
        self.setupUi(self)
	#UI界面
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(348, 349)
        self.label = QtWidgets.QLabel(parent=Form)
        self.label.setGeometry(QtCore.QRect(80, 90, 53, 15))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(parent=Form)
        self.label_2.setGeometry(QtCore.QRect(80, 140, 53, 15))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(parent=Form)
        self.label_3.setGeometry(QtCore.QRect(80, 200, 53, 15))
        self.label_3.setObjectName("label_3")
        self.leRadius = QtWidgets.QLineEdit(parent=Form)
        self.leRadius.setGeometry(QtCore.QRect(130, 90, 113, 21))
        self.leRadius.setObjectName("leRadius")
        self.leLength = QtWidgets.QLineEdit(parent=Form)
        self.leLength.setGeometry(QtCore.QRect(130, 140, 113, 21))
        self.leLength.setObjectName("leLength")
        self.leLength.setReadOnly(True)
        self.leLength.setStyleSheet("background-color:#c3c3c3")
        self.leArea = QtWidgets.QLineEdit(parent=Form)
        self.leArea.setGeometry(QtCore.QRect(130, 190, 113, 21))
        self.leArea.setObjectName("leArea")
        self.leArea.setReadOnly(True)
        self.leArea.setStyleSheet("background-color:#c3c3c3")
        self.pushButton = QtWidgets.QPushButton(parent=Form)
        self.pushButton.setGeometry(QtCore.QRect(130, 270, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.calCircle)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "计算圆的面积"))
        self.label.setText(_translate("Form", "半径:"))
        self.label_2.setText(_translate("Form", "周长:"))
        self.label_3.setText(_translate("Form", "面积:"))
        self.pushButton.setText(_translate("Form", "计 算"))
	#计算元的面积和周长
    def calCircle(self):
        r = int(self.leRadius.text())
        if r > 0:
            length = round(2 * math.pi * r, 2)
            area = round(math.pi * r * r, 2)
            self.leLength.setText(str(length))
            self.leArea.setText(str(area))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.

main方法在py文件末尾添加,使其可以运行。 

#添加main方法,运行程序
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = Ui_Form()
    ui.show()
    sys.exit(app.exec())
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

3 pyqt6-tools 安装

我们采用第二种方式来设计就会简单很多,不用一个按钮一个按钮的通过代码实现了。首先安装pyqt6-tools工具。

pip install pyqt6-tools
  • 1.

pyqt6-tools里包含两个关键工具:1.设计器Qt Designer;2.文件转换工具。

设计器Qt Designer

 

QtDesigner 是用来设计PyQt6程序界面的工具,它的启动文件是designer.exe,默认位于  用户计算机python安装目录qt6_application\Qt\bin\路径下。

文件转换工具PyUIC

用设计器Qt Designer设计好的界面保存为UI文件,需要通过PyUic将其转化成python源文件才能使用。

 Pyuic转换ui文件为py文件的转换方式如下:

Pyuic6 -o 界面文件名.py 界面文件名.ui
  • 1.

4 Qt Designer界面

Qt designer设计器页面如下,左侧为窗口部件盒,中间为设计区,右侧为对象检查器、属性编辑器、资源浏览器等子窗口。

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pip_03

设计圆周长面积计算的界面如上图,我们只需要拖拽输入框和label标签以及计算按钮就可以实现页面的设计。 

内容


描述

半径(文字部分)

QLabel

半径文字,周长面积文字都类似

半径输入框

QLineEdit

半径文字后面的输入框,输入框一般都是使用QLineEdit

计算

QPushButton

计算按钮

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pyinstaller_04

 其内容如下:

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pip_05

我们需要通过PyUic进行转换,转换后的是这样的:

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pyinstaller_06

其代码内容如下(不要求会写): 

# Form implementation generated from reading ui file '计算圆的周长面积.ui'
#
# Created by: PyQt6 UI code generator 6.4.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(348, 349)
        self.label = QtWidgets.QLabel(parent=Form)
        self.label.setGeometry(QtCore.QRect(80, 90, 53, 15))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(parent=Form)
        self.label_2.setGeometry(QtCore.QRect(80, 140, 53, 15))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(parent=Form)
        self.label_3.setGeometry(QtCore.QRect(80, 200, 53, 15))
        self.label_3.setObjectName("label_3")
        self.leRadius = QtWidgets.QLineEdit(parent=Form)
        self.leRadius.setGeometry(QtCore.QRect(130, 90, 113, 21))
        self.leRadius.setObjectName("leRadius")
        self.leLength = QtWidgets.QLineEdit(parent=Form)
        self.leLength.setEnabled(False)
        self.leLength.setGeometry(QtCore.QRect(130, 140, 113, 21))
        self.leLength.setObjectName("leLength")
        self.leArea = QtWidgets.QLineEdit(parent=Form)
        self.leArea.setEnabled(False)
        self.leArea.setGeometry(QtCore.QRect(130, 190, 113, 21))
        self.leArea.setObjectName("leArea")
        self.pushButton = QtWidgets.QPushButton(parent=Form)
        self.pushButton.setGeometry(QtCore.QRect(130, 270, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "计算圆的面积"))
        self.label.setText(_translate("Form", "半径:"))
        self.label_2.setText(_translate("Form", "周长:"))
        self.label_3.setText(_translate("Form", "面积:"))
        self.pushButton.setText(_translate("Form", "计 算"))
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

然后,我们可以直接在这里添加main函数(注意和上面的main不一样),实现运行效果:

#添加main方法,运行程序
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = uic.loadUi("./计算圆的周长面积.ui")
    ui.show()
    sys.exit(app.exec())
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pyqt6_07

5 Pyinstaller打包工具安装使用

之后添加相应的功能实现,就可以利用PyInstaller进行打包了,我们先安装PyInstaller

pip install pyinstaller
  • 1.

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_python_08

 我们利用PyInstaller进行打包:

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pyinstaller_09

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_python_10

成功打包程exe文件: 

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_python_11

双击运行如下:

入门 PyQt6 看过来(基础)01 ~ pyqt6初体验_pip_12

 下一篇:PyQt6 在PyCharm工具中的配置