将应用程序从 PySide2 迁移到 PySide6#
模块可用性#
Qt for Python 6.2.0 提供了 Qt 6 中计划包含的所有模块。
模块级别的变更#
已删除模块 QtMacExtras、Qt Quick Controls 1、QtWinExtras、QtXmlPatterns 和 QtX11Extras。
QStateMachine
以及相关类已经被提取到新的 QtStateMachine 模块。模块 QtWebKit 和 QtWebKitWidgets 已被新的 QtWebEngineCore、QtWebEngineQuick 和 QtWebEngineWidgets 模块替换。
QXmlReader
以及相关类(SAX API)已被删除。QtOpenGL 模块的内容已替换。类
QGLWidget
以及相关类(QGLContext
、QGLFunctions
、QGLShaderProgram
)已删除。部分来自 QtGui 的 OpenGL 功能已被提取到该模块中,例如QOpenGLBuffer
和QOpenGLShaderProgram
。有一个新的模块 QtOpenGLWidgets,其中包含类QOpenGLWidget
,它是QGLWidget
的替代品。
由于 OpenGL 正在淘汰,对于图形应用程序,应该考虑使用 QRhi。
导入#
迁移应用程序时首先要做的事是替换导入语句
from PySide2.QtWidgets import QApplication
from PySide2 import QtCore
需要更改为
from PySide6.QtWidgets import QApplication
from PySide6 import QtCore
一些类现在在模块中,例如 QAction
和 QShortcut
已从 QtWidgets
移动到 QtGui
。
对于 Qt Charts 和 Qt Data Visualization,已经删除了额外的命名空间。现在可以直接使用
from PySide6.QtCharts import QChartView
。
类/函数弃用#
然后,需要检查代码库是否有弃用 API 的使用,并相应地调整。例如
高 DPI 缩放属性
Qt.AA_EnableHighDpiScaling
、Qt.AA_DisableHighDpiScaling
和Qt.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
已弃用。应使用返回QPointF
的QMouseEvent.position()
和QMouseEvent.globalPosition()
。Qt.MidButton
已更名为Qt.MiddleButton
。应使用
QOpenGLVersionFunctionsFactory.get()
代替QOpenGLContext.versionFunctions()
来获取 Open GL 函数。QRegExp
已被QRegularExpression
替代。QWidget.mapToGlobal()
和QWidget.mapFromGlobal()
现在也可以接受和返回QPointF
。名字为
exec_
的函数(类QCoreApplication
、QDialog
、QEventLoop
)已被更名为exec
,这是在 Python 3 中实现的。