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下,并且需要全名才能访问它们。
例如,像AlignRight
和AlignCenter
这样的对齐标志现在被存储在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
QtWin
和QtMac
模块中的特定平台方法已被弃用。现在使用本地调用来代替。
QRegExp
已被 所取代。QRegularExpression
QDesktopWidget
已从PyQt6中删除。你可以使用QScreen
作为替代。
总结
那么这对我们来说意味着什么呢?嗯,你可能已经注意到了,PyQt5和PyQt6之间并没有明显的区别。大多数变化都是相当小的,其中一些甚至可以向后兼容PyQt5。
如果你目前正在使用PyQt5,那么你没有义务去升级。你不会错过很多东西。你最终会不得不升级吗?是的,那是必然的。所有的事情都在向前发展,最终PyQt5将不再是一个理想的选择。
另一方面,如果你是PyQt系列的新成员,可以直接从PyQt6开始。你不会有任何损失。你可以直接从PyQt6开始学习,就在这里,通过我们自己的PyQt6系列教程来学习