Der Autor hat meine Anpassungen um ein paar Änderungen erweitert und in sein Repo eingepflegt. Der QtWaitingSpinenr ist jetzt auch 3.10 kompatibel 🤓
1b268980-92ca-42a4-89a0-a6e4b7ab9378-grafik.png
Thema PyQt6 installieren, hatten wir hier abgehandelt.
Nächstes Thema waren QSettings, das hatte ich hier in der Theorie gelöst. Heute habe ich das so weit eingebaut und es funktionierte, aber.....
Danach ging noch nicht viel, nämlich gar nix So weit bin ich bis jetzt.
Wer hier aufmerksam mit liest, wird feststellen das da was fehlt. Das QDockWidget Dafür habe ich aktuell noch keine Lösung. Was ich fixen konnte, waren die Message Boxen, das waitingspinnerwidget(?) und noch ein paar andere Kleinigkeiten.
Ich werde hier in lockerer Folge, das ein oder andere vorstellen. Aber für heute ist Schluß, jetzt
Manche Dinge müssen erledigt werden
###############################################
# QDockWidget
###############################################
self.setCentralWidget(QTextEdit())
# QDOCK WIDGET
self.items = QDockWidget("Backup List", self)
self.items.setAllowedAreas(QtCore.Qt.DockWidgetArea.RightDockWidgetArea)
self.items.setFloating(False)
# LIST WIDGET
self.listWidget = QListWidget(self.items)
self.listWidget.resize(300, 120)
# listWidget zum QDockWidget 'items' hinzufügen
self.items.setWidget(self.listWidget)
# QDockWidget Position festlegen und Inhalt (?)
self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, self.items)
# Signale
self.listWidget.itemClicked.connect(self.clicked)
self.listWidget.itemDoubleClicked.connect(self.clicked2)
Und wenn man mal nicht weiß, wo man was findet. Das findet man in der Datei QtCore.pyi
Damit war ich in der Lage das Rätsel zu lösen, wie man RightDockWidgetArea aufruft.
QtCore.Qt.DockWidgetArea.RightDockWidgetArea
Ok, Schluss für heute...
Ich möchte das mit dem QDockWidget noch mal etwas genauer betrachten. Dazu als erstes der Code aus meinem PyQt5-Projekt.
###############################################
# QDockWidget
###############################################
self.items = QDockWidget("Backup List", self)
self.listWidget = QListWidget()
self.listWidget.resize(300, 120)
self.items.setWidget(self.listWidget)
self.items.setFloating(False)
self.setCentralWidget(QTextEdit())
self.addDockWidget(Qt.RightDockWidgetArea, self.items)
# click connect
self.listWidget.itemClicked.connect(self.clicked)
self.listWidget.itemDoubleClicked.connect(self.clicked2)
Schauen wir mal, welche Zeile mir Probleme bereitete.
self.addDockWidget(Qt.RightDockWidgetArea, self.items)
Kam immer folgender Traceback
Traceback (most recent call last):
File "/home/frank/restic_ui_pyqt6/src/restic_ui.py", line 4360, in <module>
mainWin = MainWindow()
File "/home/frank/restic_ui_pyqt6/src/restic_ui.py", line 2926, in __init__
self.addDockWidget(Qt.RightDockWidgetArea, self.items)
NameError: name 'Qt' is not defined
Wir laden mal die Definitionen, Rechtsklick auf RightDockWidgetArea und das hier wird einem angezeigt.
class DockWidgetArea(enum.Flag):
LeftDockWidgetArea = ... # type: Qt.DockWidgetArea
RightDockWidgetArea = ... # type: Qt.DockWidgetArea
TopDockWidgetArea = ... # type: Qt.DockWidgetArea
BottomDockWidgetArea = ... # type: Qt.DockWidgetArea
AllDockWidgetAreas = ... # type: Qt.DockWidgetArea
NoDockWidgetArea = ... # type: Qt.DockWidgetArea
Im File steht folgendes
# The PEP 484 type hints stub file for the QtCore module.
Ok ein File was uns Hinweise gibt. Unsere Funktion RightDockWidgetArea befindet sich in der Klasse DockWidgetArea. Darum hatte ich abgeleitet, das es
Qt.DockWidgetArea.RightDockWidgetArea
heißen muss. Das funktionierte aber auch nicht. Das richtige Ergebnis ist
QtCore.Qt.DockWidgetArea.RightDockWidgetArea
Irgendwie werde ich das Gefühl nicht los, das ich einen Denkfehler habe. Ich muss mal die Experten in Python Forum fragen, ob das so korrekt ist.
Noch ein Beispiel.
# RegEx
reg_ex2 = QRegExp('^[A-Za-z0-9-_>@]{16}$')
input_validator2 = QRegExpValidator(reg_ex2, self.input4)
self.input4.setValidator(input_validator2)
Richtig
reg_ex2 = QtCore.QRegularExpression('^[A-Za-z0-9-_>@]{16}$')
input_validator2 = QRegularExpressionValidator(reg_ex2, self.input4)
self.input4.setValidator(input_validator2)
Der entsprechende Import
from PyQt6.QtGui import QIcon, QAction, QValidator, QRegularExpressionValidator
Ich hatte im Python Forum mal um Hilfe gebeten und man hat mir einen Hinweis gegeben, dem ich hier mal nachgehe.
Der Forenuser meinte, das es ihn wundern würde, wenn ich von QtCore importieren müsste, also
self.addDockWidget(QtCore.Qt.DockWidgetArea.RightDockWidgetArea, self.items)
Das habe ich mal ausprobiert. Wenn ich von QtCore Qt importiere, kann ich das QtCore weglassen.
from PyQt6.QtCore import QSettings, Qt
dann geht auch
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.items)
Es sieht so aus, das ich mich in dieses Thema noch ein wenig einarbeiten muss