python快速入门系列pyqt5_PyQt5系列(1)初识、环境搭建

PyQt5是Python的QT5应用框架,具备强大的GUI功能,适用于Python2和3。本篇介绍了PyQt5的模块如QtCore、QtGui、QtWidgets等,强调了与PyQt4的不兼容性,并详细讲解了不同版本的变化。同时,文章提供了安装PyQt5的步骤,包括处理网络问题和使用国内镜像源的方法,最后通过一个简单的示例验证安装成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 简介

PyQt5是一套Python绑定Digia QT5应用的框架,是最强大的GUI库之一,适用于Python2和Python3。本系列使用Python 3.6.2。

PyQt5做为Python的模块,拥有620多个类、6000个函数和方法。而且是一个跨平台的工具包,它可以运行在所有主流的操作系统,包括UNIX,Windows,Mac OS。PyQt5是双重许可,开发者可以在GPL(通用公共许可证,General public license)和商业许可之间进行选择。

注意,PyQt5并不向下兼容PyQt4。部分改变如下:

Python模块已经重组。一些模块已经删除(qtscript),有的被分割成子模块(QtGui,QtWebKit)。

新的模块作了详细的介绍,包括qtbluetooth,qtpositioning,或enginio。

pyqt5只支持新型的信号和槽handlig。电话signal()或slot()不再支持。

pyqt5不支持Qt的API被标记为过时或陈旧的任何部分在QT V5.0。

2 PyQt5 模块

PyQt5的类被分成了很多模块,包括如下的模块:

QtCore:包含了核心的非GUI功能。此模块用于处理时间、文件和目录、各种数据类型、流、URL、MIME类型、线程或进程。

QtGui:用于窗口系统集成、事件处理、二维图形、基本成像、字体和文本的类。

QtWidgets:提供了一整套UI元素组件,用于创建经典桌面风格的用户界面。

QtMultimedia:包含用于处理多媒体内容,通过调用API接口访问摄像头、语音功能。

QtBluetooth:包含用于扫描设备并与设备连接和交互的类。

QtNetwork:包含用于网络编程的类库,这些类简化了通过TCP/IP和UDP进行的客户机和服务器的编码,使网络编程更简单、更可移植。

QtPositioning:包含通过使用各种可能的源(包括卫星、Wi-Fi或文本文件)来确定位置的一些类。

Enginio:实现了用于访问Qt云服务管理应用程序运行时的客户端库。

QtWebSockets:包含实现WebSocket协议的类。

QtWebKit:包含基于WebKit2库的web浏览器的实现类。

QtWebKitWidgets:包含基于WebKit1的web浏览器实现的类,用于基于QtWidgets的应用程序。

QtXml:包含处理XML文件的类,此模块实现了SAX和DOM api。

QtSvg:提供了显示SVG文件内容的类。可缩放矢量图形(SVG)是一种用XML描述二维图形和图形应用程序的语言。

QtSql:提供了处理数据库的类。

QtTest:包含启用PyQt5应用程序单元测试的功能。

3 PyQt5 早期版本兼容性

3.1 PyQt v5.12

转换整数时的溢出检查

在以前的版本中,PyQt5在将Python int对象转换为c++整数类型时没有执行溢出检查。发生溢出时的行为未定义。

此版本执行溢出检查,并在检测到溢出时抛出适当的异常。

可以通过调用PyQt5.sip.enableoverflowchecking(False)()来关闭溢出检查。

3.2 PyQt v5.11

引入sip模块

在以前的版本中,PyQt5使用了通常安装在site-packages目录中的sip模块的副本,应用程序通过以下方式访问它:

import sip

此版本包括模块的私有副本。应用程序应按如下方式访问它:

from PyQt5 import sip

作为向后兼容性,模块仍然可以像以前一样导入,但这仅在先导入另一个PyQt5模块时才有效。例如,以下有效:

from PyQt5 import QtCore

import sip

但是,如果import语句的顺序颠倒过来,无效。

3.3 PyQt v5.6

将Latin-1字符串转换为QByteArray

该版本在预期使用QByteArray时,删除了Latin-1编码的字符串的自动转换。它在PyQt v5.4中被弃用。

Python未处理的异常

在很多情况下,Python代码都是从c++中执行的。c++虚拟方法的Python重实现可能是最常见的例子。在以前的版本中,如果Python代码引发了异常,那么PyQt将调用Python的PyErr_Print()函数,该函数将调用sys.excepthook。在PyQt v5.5中,未处理的Python异常将导致调用Qt的qFatal()函数。默认情况下,这将调用abort(),应用程序将终止。

3.4 PyQt v5.3

Python插槽的执行

在以前的版本中,当信号被发送到没有使用pyqtSlot()的Python槽中时,不会检查底层的c++ receiver实例是否仍然存在。这与PyQt v5.0发布时的PyQt v4行为相匹配,但并不反映标准的c++行为。

缺少检查意味着对象可以将其销毁的信号连接到自身,以便在其底层c++实例被销毁时进行监视。不幸的是,对于更常见的代码来说,这是一个潜在的bug来源。

在这个版本中,已经引入了检查,因此为依赖于早期行为的任何代码创建了不兼容性。作为一个解决方案,no_receiver_check参数被添加到connect中,它允许在每个连接的基础上禁止检查。

默认参数的Qt信号

在以前的版本中,带有默认参数的Qt信号被外露为多个信号,每个信号有一个额外的默认参数。例如,QAbstractButton::clicked(bool checked = false)被外露为QAbstractButton::clicked(bool checked)和QAbstractButton::clicked(),前者为默认信号。因此,可以使用空元组作为键来索引后者——尽管这样做没有任何好处。

在这个版本中,只有带有所有参数的信号是公开的。但是信号的emit()方法仍然支持默认参数,也就是说,当正常使用时,应该不会注意到变化。

4 PyQt5 安装

安装GPL版本:

pip install PyQt5

可能会报错ERROR: Could not find a version that satisfies the requirement PyQt5 (from versions: none) ERROR: No matching distribution found for PyQt5

e4dd181b2616ecdaef2890c35351bbb2.png 这是因为网络的问题,需要使用国内的镜像源来加速,比如豆瓣源

pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

也可以使用 -i https://pypi.tuna.tsinghua.edu.cn/simple等等

测试。创建Sample.py,填入以下内容,并保存文件

import sys

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':

app = QApplication(sys.argv)

w = QWidget()

w.resize(250, 150)

w.move(300, 300)

w.setWindowTitle('Sample')

w.show()

sys.exit(app.exec_())

python Sample.py运行,出现如下窗口,即代表安装成功。

36ebf013ae58dfc24b601fb8b2fda2f3.png

-----------本文结束啦-----------

💡 更多好文欢迎关注我的公众号~

40b730012e16b9179ac8575450591a94.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值