首页
学习
活动
专区
工具
TVP
发布

值得学习的Python GUI 库 - pyQt5快速入门及精美界面设计体验

前言

在很多追求极致的开发者中,大多都会拿 Python 跟其他编程语言比较,比如和 java 或者 C/C++比较一番,大家通常都会不约而同地从执行的角度对一门语言进行比较.而且这也是最直观的感受,所以 Python 会被普遍认为执行速度不够快.但是我一直觉得,存在即合理,每门编程语言都有它存在的意义,每门语言都有自己擅长的地方,一门编程语言的诞生大多都是作者当时为了解决自己遇到的某一领域难题而创造的,所以每一门语言在某一领域都有自己的优势,而且如今 CPU 的处理速度足够快,基本可以缩小很多领域之间不同语言的执行效率差距.各司其职,合适的语言运用在合适的领域或许能得到意想不到的效果.语言没有好坏之分,也没有评判的意义,而且都是大家根据自己喜好,需求和使用感受选择的结果.当然这不是我们今天讨论的重点,我也没有讨论这些的能力,作为上层的使用者,最重要的是怎么使用好他.那说到使用也是看到语言的优点,那 Python 有哪些优点呢?

  1. Python 注重可读性,一致性和软件质量,这使得它易于理解,而且 Python 支持高级重用机制
  2. 开发效率高,得益于 Python 活跃的社区和丰富的类库资源的支持,让功能实现更简单快速
  3. Python 有灵活的继承机制,这使得他可以和其他语言相互调用,大家也称 Python 为"胶水语言"
  4. 易于学习

所以学习和使用 pyQt5 也是因为 Python 以上这些优点.也觉得他适合用来做这件事.圆规正传,进入今天的主角 PyQt5 的学习

PyQt5 是什么

上面我们说了为什么使用 PyQt5,接着我们了解它是什么?

Qt 库是世界上最强大的 GUI 库之一,跨平台,开发语言为 C++(https://www.qt.io). PyQt 是 QT 框架的 Python 语言实现,PyQt5 是用来创建 Python GUI 应用程序的工具包。作为一个跨平台的工具包,PyQt 可以在所有主流操作系统上运行(Unix,Windows,Mac)。有 PyQt3,PyQt4,PyQt5,PyQt6 几个版本。PyQt5 和之前的版本已经有较大的区别,而且也是目前大家比较常用的版本,如果你是学习肯定是以最新的为主,可以直接使用 pyQt6,其实 pyQt5 也是不错的选择,也是本文所使用的版本.

官方网站:https://www.riverbankcomputing.com/software/pyqt/download5

PyQt5 怎么用

安装

方式 1(推荐)

直接使用 pip 进行安装,这也是最常用的模式

pip install pyQt5

pip install pyQt5-tools

当你遇到上述错误时,是因为 pip 的依赖项解析器当前未考虑安装的所有包,单独安装相关的包即可:pyqtwebengine

方式 2

通过下载 exe 安装版进行安装

以上两种安装方式所安装的pyQt5都在 Lib\site-packages\PyQt5 目录下

如果安装 pyQt5 出现问题权限问题,拒绝访问.可使用下面的命令尝试安装:

pip install PyQt5-tools --user

配置 qt Designer
程序/Program:Lib\site-packages\qt5_applications目录下的designer.exe文件(E:\Anaconda3\Lib\site-packages\qt5_applications\Qt\bindesigner.exe)
参数/Argument:-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py
工作目录/Working directory: $FileDir$

配置 PyUIC
程序/Program:python的安装目录下的python.exe文件(anaconda的安装路径下的python.exe)
参数/Argument:-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py
工作目录/Working directory: $FileDir$

配置 Pyrcc
程序/Program:python的安装目录下的Scripts文件夹的pyrcc5.exe文件
参数/Argument:$FileName$ -o $FileNameWithoutExtension$_rc.py
工作目录/Working directory: $FileDir$

$FileDir$是在当前目录下将.ui 文件生成.py 文件,而 $ProjectFileDir$是在总目录树下生成,这时就会产生空文件夹的报错问题。如果用后者的话就会遇到常见问题 Error: No such file or directory: "jianji.ui"

安装完成后在 file->External Tools 下面就可以看到刚才配置的扩展工具

使用步骤

用法:先使用 QTDesigner 设计好界面,然后保存到项目目录:

然后通过 PyUIC 把 QTDesigner 创建的 ui 转化为 Python 代码,大大简化了书写代码的繁琐操作

实际运行的代码是:

python.exe -m PyQt5.uic.pyuic jianji.ui -o jianji.py

PyQt5 能做什么

PyQt5 是什么的介绍中已经了解到 PyQt5 是一个和 TKinter 类似的 GUI 开发库,他比 TKinter 更强大,更专业.我们通过实例来了解他能做什么

第一个 pyqt5 程序

import sys

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':
    # 创建QApplication实例
    app = QApplication(sys.argv)  # 获取命令行参数
    # 创建一个窗口
    w = QWidget()
    # 设置窗口的尺寸
    w.resize(800, 300)  # 宽,高
    # 显示位置
    w.move(300, 300)
    # 设置窗口标题
    w.setWindowTitle('我的界面')
    # 显示窗口
    w.show()
    sys.exit(app.exec_())

进入程序主循环,循环扫描响应在窗口上的事件,让整个程序不会退出 通过 exit 函数能够确保主循环安全结束

小试牛刀

效果图如下:

文章篇幅原因 ui 转化的代码就不粘贴了.

简单调用并展示页面:

import sys
import office.appguis.jianji as cut
from PyQt5.QtWidgets import QApplication, QMainWindow

if __name__ == '__main__':
    # 实例化,传参
    app = QApplication(sys.argv)

    # 创建对象
    mainWindow = QMainWindow()

    # 创建ui,引用demo1文件中的Ui_MainWindow类
    ui = cut.Ui_MainWindow()
    # 调用Ui_MainWindow类的setupUi,创建初始组件
    ui.setupUi(mainWindow)
    # 创建窗口
    mainWindow.show()
    # 进入程序主循环,循环扫描响应在窗口上的事件,让整个程序不会退出
    #通过exit函数确保主循环安全结束
    sys.exit(app.exec_())

在《体验 Python 剪辑视频以及相关问题解决, 一劳永逸!》这篇文章中我们使用了 TKinter 来制作 UI 界面,那今天我们用 pyqt5 来实现它,对比两者在开发上的区别

import sys
import office.appguis.jianji as cut
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGroupBox, QPushButton, QLabel, QHBoxLayout,  QVBoxLayout, QGridLayout, QFormLayout, QLineEdit, QTextEdit
from moviepy.editor import *

# 按钮的单击事件的方法(自定义的槽)
def onClick_Button(origin, t1, t2, savedir):
    s1 = origin.toPlainText()
    s2 = t1.toPlainText()
    s3 = t2.toPlainText()
    s4 = savedir.toPlainText()
    print(s1)
    print(s2)
    print(s3)
    print(s4)
    print("开始剪辑")
    clip = VideoFileClip(s1).subclip(s2, s3)
    # 将剪出的视频进行存储
    clip.write_videofile(s4)
    # 你的剪辑代码
    print("结束")


if __name__ == '__main__':
    # 只有直接运行这个脚本,才会往下执行
    # 别的脚本文件执行,不会调用这个条件句

    # 实例化,传参
    app = QApplication(sys.argv)

    # 创建对象
    mainWindow = QMainWindow()

    # 创建ui,引用demo1文件中的Ui_MainWindow类
    ui = cut.Ui_MainWindow()
    # 调用Ui_MainWindow类的setupUi,创建初始组件
    ui.setupUi(mainWindow)
    t1 = ui.textEdit
    t2 = ui.textEdit_2
    t3 = ui.textEdit_3
    t4 = ui.textEdit_4

    ui.pushButton.clicked.connect(lambda: onClick_Button(t1, t3, t4, t2))
    # 创建窗口
    mainWindow.show()
    # 进入程序的主循环,并通过exit函数确保主循环安全结束(该释放资源的一定要释放)
    sys.exit(app.exec_())

总结

PyQt5 的页面设计中,PyQt5 拥有所见即所得的可视化设计工具 PyQt5 Qt Designer,可通过拖拽的方式进行设计.类似于 VS 集成编辑器开发.Net 的方式.使用拖拽的方式,让开发更加高效,设计更加简单

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/e109d08304e4508531285b8a2
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券