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.
Quelle