PyQt6 Umstieg und seine Hürden

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
FrankM
User
Beiträge: 26
Registriert: Dienstag 20. Juli 2021, 08:51

Ich hätte mal wieder ein Problem und frage mal hier in die Runde. Zum Einstieg, bin Einsteiger und bastel schon was länger an einem UI für restic, das basiert auf PyQt5. Funktioniert auch alles ;)

Jetzt wollte ich mal zum Üben, versuchen das ganze auf PyQt6 umzustellen. Ok, war doch etwas komplexer das Thema. Am Ende lief auch damit alles. Aber....ich gebe mal ein Beispiel

PyQt5

Code: Alles auswählen

self.addDockWidget(Qt.RightDockWidgetArea, self.items)
PyQt6

Code: Alles auswählen

self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, self.items)
Ich habe mich sehr schwer damit getan, rauszufinden das es jetzt anstelle von Qt.

Code: Alles auswählen

QtCore.Qt.DockWidgetArea.
lauten muss. Ich habe aber den Eindruck, das ich das evt. nicht korrekt mache und deswegen meine Frage "Ist das so korrekt?"

Da es evt. mit den Importen zusammenhängt, füge ich die hier an.

Code: Alles auswählen

from PyQt6.QtWidgets import (
    QMainWindow,
    QToolBar,
    QApplication,
    QLabel,
    QVBoxLayout,
    QPlainTextEdit,
    QFileDialog,
    QInputDialog,
    QLineEdit,
    QWidget,
    QTextEdit,
    QDockWidget,
    QListWidget,
    QPushButton,
    QGridLayout,
    QTabWidget,
    QFormLayout,
    QCheckBox)

from PyQt6.QtGui import QIcon, QAction, QValidator, QRegularExpressionValidator

from PyQt6.QtCore import (
    Qt,
    QSize,
    # QRegExp,
    QSettings,
    QObject,
    QThread,
    pyqtSlot,
    pyqtSignal)

from PyQt6 import QtCore  # QtWidgets
Und noch eine Frage zum Schluss, sollte man wenn möglich PyQt6 benutzen?
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bezweifele, dass das QtCore sein muss, wenn du von ebenda den Qt-Namensraum importierst. Siehe deine eigenen Importe. Der eigentliche Unterschied ist der DockWidgetArea-Name denke ich. Kann sein, dass Qt da eine “enum class” eingeführt hat, ein Feature, dass es erst seit C++11 gibt. Solche Unterschiede kommen eben vor zwischen Versionen.

Womit wir bei der neuen Version wären. Grundsätzlich spricht wenig dagegen, allerdings hat Qt6 einen anderen Lebenszyklus als Qt5 - der ist kürzer geworden. Das soll durch quasi erzwungene, regelmäßige Updates mehr Leute dazu bringen, die Lizenz zu erwerben. Da aber Qt5 inzwischen am Ende seines Lebens ist, außer man bezahlt auch da, ist es eh Wurscht. Ich würde also auch 6 nehmen.
FrankM
User
Beiträge: 26
Registriert: Dienstag 20. Juli 2021, 08:51

Danke für deine Ausführungen. Ich habe mir das eben noch mal angeschaut und du hast natürlich recht, wenn ich es so importiere

Code: Alles auswählen

from PyQt6.QtCore import Qt
dann geht es auch so

Code: Alles auswählen

self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.items)
Da ist wohl beim Testen etwas bei mir durcheinander geraten.
Antworten