将应用程序从 PySide2 迁移到 PySide6#

模块可用性#

Qt for Python 6.2.0 提供了 Qt 6 中计划包含的所有模块。

模块级别的变更#

  • 已删除模块 QtMacExtrasQt Quick Controls 1QtWinExtrasQtXmlPatternsQtX11Extras

  • QStateMachine 以及相关类已经被提取到新的 QtStateMachine 模块。

  • 模块 QtWebKitQtWebKitWidgets 已被新的 QtWebEngineCoreQtWebEngineQuickQtWebEngineWidgets 模块替换。

  • QXmlReader 以及相关类(SAX API)已被删除。

  • QtOpenGL 模块的内容已替换。类 QGLWidget 以及相关类(QGLContextQGLFunctionsQGLShaderProgram)已删除。部分来自 QtGuiOpenGL 功能已被提取到该模块中,例如 QOpenGLBufferQOpenGLShaderProgram。有一个新的模块 QtOpenGLWidgets,其中包含类 QOpenGLWidget,它是 QGLWidget 的替代品。

由于 OpenGL 正在淘汰,对于图形应用程序,应该考虑使用 QRhi

导入#

迁移应用程序时首先要做的事是替换导入语句

from PySide2.QtWidgets import QApplication
from PySide2 import QtCore

需要更改为

from PySide6.QtWidgets import QApplication
from PySide6 import QtCore

一些类现在在模块中,例如 QActionQShortcut 已从 QtWidgets 移动到 QtGui

对于 Qt ChartsQt Data Visualization,已经删除了额外的命名空间。现在可以直接使用

from PySide6.QtCharts import QChartView

类/函数弃用#

然后,需要检查代码库是否有弃用 API 的使用,并相应地调整。例如

  • 高 DPI 缩放属性 Qt.AA_EnableHighDpiScalingQt.AA_DisableHighDpiScalingQt.AA_UseHighDpiPixmaps 已被弃用。在高 DPI 下,Qt 6 默认启用,无法关闭。

  • QDesktopWidget 已被移除。应使用 QScreen,可以通过 QWidget.screen()QGuiApplication.primaryScreen()QGuiApplication.screens() 来获取。

  • QFontMetrics.width() 已更名为 horizontalAdvance()

  • QMouseEvent.pos()QMouseEvent.globalPos() 返回 QPoint 以及 QMouseEvent.x()QMouseEvent.y() 返回 int 已弃用。应使用返回 QPointFQMouseEvent.position()QMouseEvent.globalPosition()

  • Qt.MidButton 已更名为 Qt.MiddleButton

  • 应使用 QOpenGLVersionFunctionsFactory.get() 代替 QOpenGLContext.versionFunctions() 来获取 Open GL 函数。

  • QRegExp 已被 QRegularExpression 替代。

  • QWidget.mapToGlobal()QWidget.mapFromGlobal() 现在也可以接受和返回 QPointF

  • 名字为 exec_ 的函数(类 QCoreApplicationQDialogQEventLoop)已被更名为 exec,这是在 Python 3 中实现的。

更多信息可以在Qt 6迁移指南Qt 6.2 文档中找到。