Porting Applications from PySide2 to PySide6

Module Availability

Qt for Python 6.0.0 initially ships with the essential Modules and some add-ons (Qt 3D, Qt Concurrent, Qt Help, Qt OpenGL, Qt Print Support Qt Quick Widgets, Qt SQL, Qt SVG, Qt UI Tools and Qt XML).

More modules will follow in subsequent releases as they are added to Qt.

For Qt for Python 6.1, Active Qt, Qt Charts, Qt Data Visualization, Qt StateMachine and Qt SCXML are planned.

Module-Level Changes

  • Qt Quick Controls 1 have been removed.

  • QStateMachine and related classes have been extracted to a new QtStateMachine module.

  • QXmlReader and related classes (SAX API) have been removed.

  • The content of the QtOpenGL module has been replaced. The class QGLWidget and related classes (QGLContext, QGLFunctions, QGLShaderProgram) have been removed. Parts of the Open GL functionality from QtGui have been extracted into this module, for example QOpenGLBuffer and QOpenGLShaderProgram. There is a new module QtOpenGLWidgets which contains the class QOpenGLWidget, a replacement for QGLWidget.

As Open GL is phasing out, QRhi should be considered for graphics applications.

Imports

The first thing to do when porting applications is to replace the import statements:

from PySide2.QtWidgets import QApplication...
from PySide2 import QtCore

needs to be changed to:

from PySide6.QtWidgets import QApplication...
from PySide6 import QtCore

Some classes are in a different module now, for example QAction and QShortcut have been moved from QtWidgets to QtGui.

For Qt Charts and Qt Data Visualization, the additional namespaces have been removed. It is now possible to use:

from PySide6.QtCharts import QChartView

directly.

Class/Function Deprecations

Then, the code base needs to be checked for usage of deprecated API and adapted accordingly. For example:

  • The High DPI scaling attributes Qt.AA_EnableHighDpiScaling, Qt.AA_DisableHighDpiScaling and Qt.AA_UseHighDpiPixmaps are deprecated. High DPI is by default enabled in Qt 6 and cannot be turned off.

  • QDesktopWidget has been removed. QScreen should be used instead, which can be retrieved using QWidget.screen(), QGuiApplication.primaryScreen() or QGuiApplication.screens().

  • QFontMetrics.width() has been renamed to horizontalAdvance().

  • QMouseEvent.pos() and QMouseEvent.globalPos() returning a QPoint as well as QMouseEvent.x() and QMouseEvent.y() returning int are now deprecated. QMouseEvent.position() and QMouseEvent.globalPosition() returning a QPointF should be used instead.

  • Qt.MidButton has been renamed to Qt.MiddleButton.

  • QOpenGLVersionFunctionsFactory.get() instead of QOpenGLContext.versionFunctions() should be used to obtain Open GL functions.

  • QRegExp has been replaced by QRegularExpression.

  • QWidget.mapToGlobal() and QWidget.mapFromGlobal() now also accept and return QPointF.

  • Functions named exec_ (classes QCoreApplication, QDialog, QEventLoop) have been renamed to exec which became possible in Python 3.

More information can be found in the Porting to Qt 6 Guide and the Qt 6.0 Documentation .