PyQt6 和 PyQt5 的差异
PyQt6 是 PyQt5 的下一个版本,但两个版本的写法基本上其实大同小异,这篇教学会介绍 PyQt6 和 PyQt5 有何差异。
快速预览:
.exec_() 改为 .exec()
方法的位置或名称改变
不需要高 DPI 缩放属性
支援 Qt的资源
特定平台
其他细节差异
PyQt6 教学 - PyQt6 和 PyQt5 的差异
.exec_() 改为 .exec()
在 Python 2.7 中,exec 是一个保留字,使用者不可将这个字作为变数、函数或方法的名称的字,在 PyQt 的早期版本中,该方法被重命名为 ,并在后面加上底线避免命名衝突。然而在 Python 3.0 之后的版本删除了 exec 关键字,也由于 PyQt6 只支援 Python 3.x 的版本,所以就将 改为 。.exec_()``.exec_()``.exec()
方法的位置或名称改变
PyQt6 针对各个种类的 Enums 位置进行重大的改变。所有的 Enums 被归类到标准 Python 的 Enum 类裡作为子类别,并需要全名才能使用,下方列出 PyQt5 和 PyQt6 在使用上的差异。
函式库安装
PyQt5 | PyQt6 |
---|---|
pip install PyQtWebEngine | pip install PyQt6-WebEngine |
数值调整滑杆
PyQt5 | PyQt6 |
---|---|
QtWidgets.QLineEdit.Password | QtWidgets.QLineEdit.EchoMode.Password |
设置方向(1) | setOrientation(QtCore.Qt.Orientation.Horizontal) |
设置方向(2) | setOrientation(QtCore.Qt.Orientation.Vertical) |
QSlider.TicksAbove | QSlider.TickPosition.TicksAbove |
QSlider.Ticks下面 | QSlider.TickPosition.TicksUnder |
QSlider.TicksBothSides | QSlider.TickPosition.TicksBothSides |
QSlider.TicksLeft | QSlider.TickPosition.TicksLeft |
QSlider.TicksRight | QSlider.TickPosition.TicksRight |
消息档案对话窗口
PyQt5 | PyQt6 |
---|---|
QMessageBox.information | QMessageBox.Icon.Information |
QMessageBox.Warning | QMessageBox.Icon.Warning |
QMessageBox.Critical | QMessageBox.Icon.Critical |
QMessageBox.Question | QMessageBox.Icon.Question |
QMessageBox.Question | QMessageBox.Icon.Question |
QMessageBox.Ok | QMessageBox.StandardButton.Ok |
QMessageBox.Open | QMessageBox.StandardButton.Open |
QMessageBox.Save | QMessageBox.StandardButton.Save |
QMessageBox.Cancel | QMessageBox.StandardButton.Cancel |
QMessageBox.Close | QMessageBox.StandardButton.Close |
QMessageBox.Discard | QMessageBox.StandardButton.Discard |
QMessageBox.Apply | QMessageBox.StandardButton.Apply |
画笔和颜色
PyQt5 | PyQt6 |
---|---|
QtWidgets.QAction | QtGui.QAction |
QFont.Style斜体 | QFont.Style.Style斜体 |
Qt.DotLine | Qt.PenStyle.DotLine |
Qt.FlatCap | Qt.PenCapStyle.FlatCap |
Qt.Miter加入 | Qt.PenJoinStyle.MiterJoin |
QImage.Format_RGB888 | QImage.Format.Format_RGB888 |
对齐相关
PyQt5 | PyQt6 |
---|---|
QtCore.Qt.AlignLeft | QtCore.Qt.AlignmentFlag.AlignLeft |
QtCore.Qt.AlignCenter | QtCore.Qt.AlignmentFlag.AlignCenter |
QtCore.Qt.AlignRight | QtCore.Qt.AlignmentFlag.AlignRight |
QtCore.Qt.AlignTop | QtCore.Qt.AlignmentFlag.AlignTop |
QtCore.Qt.AlignBottom | QtCore.Qt.AlignmentFlag.AlignBottom |
QtWidgets.QListView.TopToBottom | QtWidgets.QListView.Flow.TopToBottom |
QtWidgets.QListView.LeftToRight | QtWidgets.QListView.Flow.LeftToRight |
布局
PyQt5 | PyQt6 |
---|---|
QtCore.Qt.AlignRight | QtCore.Qt.AlignmentFlag.AlignRight |
QtCore.Qt.AlignVCenter | QtCore.Qt.AlignmentFlag.AlignVCenter |
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignmentFlag.AlignHCenter |
QtWidgets.QFormLayout.DontWrapRows | QtWidgets.QFormLayout.RowWrapPolicy.DontWrapRows |
QtWidgets.QFormLayout.WrapLongRows | QtWidgets.QFormLayout.RowWrapPolicy.WrapLongRows |
QtWidgets.QFormLayout.WrapAllRows | QtWidgets.QFormLayout.RowWrapPolicy.WrapAllRows |
鼠标、键盘与窗口
PyQt5 | PyQt6 |
---|---|
QMouseEvent.x() | QEnterEvent.position(event).x() |
QMouseEvent.y() | QEnterEvent.position(event).y() |
QMouseEvent.globalX() | QEnterEvent.globalPosition(event).x() |
QMouseEvent.globalY() | QEnterEvent.globalPosition(event).y() |
QMouseEvent.button() | QEnterEvent.button(event) |
QMouseEvent.timestamp() | QEnterEvent.timestamp(event) |
QtWidgets.QShortcut | QtGui.QShortcut |
Qt.已检查 | Qt.CheckState.Checked |
QtWidgets.width() | QtWidgets.QApplication.screens()[0].size().width() |
QtWidgets.height() | QtWidgets.QApplication.screens()[0].size().height() |
不需要高 DPI 缩放属性
因为高 DPI 是 PyQt6 的预设设定,因此不需要再使用下列高 DPI 缩放属性的设定。
Qt.AA_EnableHighDpiScaling
Qt.AA_DisableHighDpiScaling
Qt.AA_UseHighDpiPixmaps
不支援 Qt的资源
PyQt6 已经不再支援 Qt 资源框架 ( Qt's resource ),如果要将程式码和资源打包成应用程式,可以使用 PyInstaller 进行打包作业。
特定平台
PyQt6 弃用了 QtWin 和 QtMac 模组中支援特定平台的方法,转而使用本机调用。
QtWin:
try:
# Include in try/except block if you're also targeting Mac/Linux
from PyQt5.QtWinExtras import QtWin
myappid = 'com.learnpyqt.examples.helloworld'
QtWin.setCurrentProcessExplicitAppUserModelID(myappid)
except ImportError:
pass
本地:
try:
# Include in try/except block if you're also targeting Mac/Linux
from ctypes import windll # Only exists on Windows.
myappid = 'mycompany.myproduct.subproduct.version'
windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
except ImportError:
pass
其他细节差异
QDesktopWidget 已经被移除,使用 QScreen 代替 ( 可以使用 , ,或 )。
QWidget.screen() QGuiApplication.primaryScreen() QGuiApplication.screens()
QFontMetrics的.width()
已重命名为 。horizontaladvance()
Qt.MidButton
已重命名为 。Qt.MiddleButton
QRegExp 改为 QRegularExpression。
推荐使用 QOpenGLVersionFunctionsFactory() 的 而不是 QOpenGLContext() 的。
.get()
QWidget.mapToGlobal()
和 返回一个 QPoinF 对象。QWidget.mapFromGlobal()
文章来源:https://www.toymoban.com/news/detail-607130.html文章来源地址https://www.toymoban.com/news/detail-607130.html
到了这里,关于PyQt6 和 PyQt5 的差异的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!