Cross-Plattform: Qt for Python schlängelt zu Version 6 des Frameworks

Qt for Python 6 ist auf die aktuelle Hauptversion des Cross-Plattform-Frameworks ausgelegt und ermöglicht unter anderem direkten Zugriff auf Qt-Properties.

In Pocket speichern vorlesen Druckansicht 13 Kommentare lesen
Schlange, Python, Paradies

(Bild: Michael Schwarzenberger, gemeinfrei (Creative Commons CC0))

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Kurz nach der Veröffentlichung der ersten neuen Hauptversion des Qt-Frameworks seit acht Jahren zieht das Python-Team der Qt Company nach und veröffentlicht Qt for Python 6. Das Projekt nutzt dabei einige der neuen Funktionen des Frameworks im Zusammenspiel mit C++ und vereinfacht gleichzeitig den Zugriff auf Qt-Properties.

Wer Qt for Python bereits nutzt, mag sich über den großen Versionssprung wundern: Unter Qt 5.x waren die beiden zugehörigen Pakete als Pyside2 und Shiboken2 geführt. PySide war ursprünglich für Qt 4 erschienen, sodass mit Qt 5 Version 2 folgte. Nun hat das Team beschlossen, die Nummer der Hauptversion an die des Qt-Frameworks anzugleichen, das frisch in Version 6 erschienen ist.

Eine Änderung , die bereits im Zusammenspiel mit Qt 5.15.2 funktionierte, ist die optionale Verwendung von Snake Case statt Camel Case zum Ansprechen der Qt-APIs. Erstere Schreibweise hat Binnenversalien, um einzelne Wörter zu trennen wie in meineKlasse, während bei Snake Case die Wörter durch einen Unterstrich als meine_klasse getrennt sind. Zum Umschalten dient die Option __feature__.

Beim Verwenden von Qt 6.0 lassen sich durch Setzen der Option Qt-Properties aus Python-Code heraus direkt ansprechen, statt die zugehörigen Getter beziehungsweise Setter zu verwenden. Der Qt-Blog führt ein Beispiel auf, indem aus der alten Schreibweise

table = QTableWidget()
table.setColumnCount(2)

button = QPushButton("Add")
button.setEnabled(False)

layout = QVBoxLayout()
layout.addWidget(table)
layout.addWidget(button)

in der neuen Form die Properties von table und button direkt ansprechbar sind:

from __feature__ import snake_case, true_property

table = QTableWidget()
table.column_count = 2

button = QPushButton("Add")
button.enabled = False

layout = QVBoxLayout()
layout.add_widget(table)
layout.add_widget(button)

Shiboken ist als zweiter Baustein von Qt for Python für die Anbindung an C oder C++ verantwortlich. Ein Generator erstellt aus den C- oder C++-Header-Informationen CPython-Code, um Projekte nach Python zu übertragen. Daneben hat Shiboken ein Python-Modul, das in CPython geschrieben ist, Python-Typen bereitstellt und Funktionen unter anderem für das Pointer-Handling mitbringt.

Viele Änderungen in Shiboken finden unter der Haube statt, so hat das Team wohl das Zusammenspiel mit der vom Generator verwendeten Library ApiExtractor neu gestaltet. Außerdem solll das Zusammenspiel mit Smart Pointers besser funktionieren, und Qt for Python kennt die in Qt 6 vorgenommene Vereinheitlichung von QVector und QList.

Daneben gibt es einen neuen Modus zum Erstellen einer Dokumentation zum Projekt, ohne die komplette API-Dokumentation einzubeziehen: build_rst_docs.

Erwähnenswert ist, dass Qt for Python mindestens Python 3.6 voraussetzt und das aktuelle Python 3.9 ausgerichtet ist. Somit entfällt sowohl das seit Jahresanfang offiziell nicht mehr unterstützte Python 2.x als auch Python 3.5, für das das Python-Team den Support kurz vor der Veröffentlichung von 3.9 aufgekündigt hatte.

Weitere Details zu Qt for Python lassen sich dem Qt-Blog entnehmen. Die Installation vom Python Package Index (PyPI) erfolgt über pip install pyside6.

(rme)