PyQt5和PyQt6之间的区别

2,300 阅读4分钟

PyQt是一个Python GUI框架,用于创建GUI,图形用户界面。2021年1月,PyQt6被引入(版本6),带来了一些变化和改进。在这篇文章中,我们将讨论PyQt6与其前身PyQt5之间的区别。


变化概述

PyQt是C++中Qt框架的一个Python绑定。对Qt的修改和更新也会反映在PyQt中。因此,Qt 6.0框架的变化日志也会告诉我们PyQt6的新变化,这是合理的。

从官方消息来看,以下是Qt 6.0的主要变化。

  • 充分利用新的C++17标准的特性
  • 下一代的QML**(Qt建模语言)**
  • 新的图形架构
  • Qt Quick的统一2D和3D
  • CMake构建系统(应用程序仍支持qmake)。
  • 各种杂项改进。

主要区别

注意:对于PyQt6,需要Python v3.6.1或更高版本。旧版本不再被支持。

名称变化

exec_()print_() 方法已从PyQt6中完全删除。

Qt中的.exec() 方法启动你的QApplication 或对话框的事件循环。在Python 2.7中,exec 是一个保留关键字,意味着它不能作为变量名、函数名或方法名使用。在PyQt的早期版本中,该方法被重命名为.exec_() ,并在后面加了一个下划线,以避免命名冲突。

这一变化背后的原因是Python 3.0删除了exec 关键字,释放了这个名字的使用。而且由于PyQt6只支持Python 3.x版本,所以下划线的名字也被删除。这些在PyQt5中已经被废弃.exec() 方法在那里也可以使用(它们是向后兼容的)。


枚举和子类

PyQt6对各种类的Enums的存储位置做了一些重大的改变。Enums现在被归类到其他Enums下,并且需要全名才能访问它们。

例如,像AlignRightAlignCenter 这样的对齐标志现在被存储在AlignmentFlag Enum下。

在PyQt5中,我们可以按如下方式访问它们。

layout.setAlignment(Qt.AlignCenter)

在PyQt6中,我们需要指定完整的名称,如下图所示。

layout.setAlignment(Qt.AlignmentFlag.AlignCenter)

然而,就像.exec().print() 名称的变化一样,这些变化是完全向后兼容的。Enums的全名在PyQt5中也可以使用。这样做的好处是允许你在移植到PyQt6之前在你的PyQt5应用程序中做这些改变。


不再有QResources

PyQt6已经取消了对Qt资源框架的支持。对于将数据文件与你的应用程序打包,你可以使用PyInstaller的数据文件支持


移动了QAction

在PyQt6中,用于创建工具栏和菜单的QAction 类,已经从QtWidgets模块转移到QtGui模块。


高 DPI 缩放

高DPI*(每英寸点数*)的缩放属性。

Qt.AA_EnableHighDpiScaling,
Qt.AA_DisableHighDpiScaling
和,

Qt.AA_UseHighDpiPixmaps

已经被弃用,因为高DPI设置是PyQt6的默认设置。这不能被禁用。


许可证变更

实现对网络授权支持的(GPL许可)Qt类的绑定已经转移到了一个单独的附加项目PyQt6-NetworkAuth 。这意味着所有由PyQt6本身包裹的库都在LGPL下授权。

  • pylupdate6是一个全新的纯Python实现。它不再能读取.pro 文件以确定要翻译的.py 文件的名称。
  • 对Qt资源系统的支持已经被移除(即:没有pyrcc6 )。

其他杂项。变化。

qApp移除了我们用来返回当前 QApplication 实例的 QApplication 实例。

PYQT_CONFIGURATION dict 已被删除。

Qt.MidButton 已被重命名为Qt.MiddleButton

QtWinQtMac 模块中的特定平台方法已被弃用。现在使用本地调用来代替。

QRegExp 已被 所取代。QRegularExpression

QDesktopWidget 已从PyQt6中删除。你可以使用QScreen 作为替代。


总结

那么这对我们来说意味着什么呢?嗯,你可能已经注意到了,PyQt5和PyQt6之间并没有明显的区别。大多数变化都是相当小的,其中一些甚至可以向后兼容PyQt5。

如果你目前正在使用PyQt5,那么你没有义务去升级。你不会错过很多东西。你最终会不得不升级吗?是的,那是必然的。所有的事情都在向前发展,最终PyQt5将不再是一个理想的选择。

另一方面,如果你是PyQt系列的新成员,可以直接从PyQt6开始。你不会有任何损失。你可以直接从PyQt6开始学习,就在这里,通过我们自己的PyQt6系列教程来学习