Skip to content

Restic UI - auf PyQt6 umbauen

Restic UI
  • 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.

    0f48700f-2e01-4d32-b97f-f99cc3bbbcc3-grafik.png

    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 😊

    2bc3bf15-7735-4641-b551-1a40a90b10b7-image.png

    QDockWidget

            ###############################################
            # 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

    af1722d6-34c7-48b2-b88c-4f99b7d65c42-image.png

    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.

    Quelle

  • 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 🙂

  • 0 Stimmen
    7 Beiträge
    148 Aufrufe
    FrankMF

    Link Preview Image Merge branch 'master' into 'main' (45c83cd8) · Commits · Frank / restic_ui_pywebio · GitLab

    Fix some bugs See merge request Bullet64/restic_ui_pywebio!71

    favicon

    GitLab (gitlab.com)

  • Restic UI - Repo Version

    Restic UI
    1
    0 Stimmen
    1 Beiträge
    81 Aufrufe
    Niemand hat geantwortet
  • Restic UI - Vorstellung Part 2

    Restic UI
    1
    0 Stimmen
    1 Beiträge
    122 Aufrufe
    Niemand hat geantwortet
  • 0 Stimmen
    3 Beiträge
    165 Aufrufe
    FrankMF

    Hallo @berthold, du bist mein einziger Star 🙂 Ok, darum geht es mir ja nicht, wie Du weißt mache ich das hauptsächlich für mich und meine Backups klappen damit sehr gut. Ist also produktiv einsetzbar.

    Wie Du gemerkt hast, gibt es Zeiten da mache ich ganz viel und dann wieder Zeiten da passiert nix. Das ist bei mir normal, ich muss da "Bock" drauf haben. Habe ich viel Stress auf der Arbeit, passiert Abends eher sehr wenig..

    Ich hoffe das ich mittlerweile alle Fehler gefunden habe, die Grundfunktionen sind alle funktional. Mittlerweile kann man die JSON Datei mit den Daten der Backups auf Wunsch auch verschlüsseln 🙂

    Ich habe noch eine ganze Reihe an Notizen, was ich gerne noch machen möchte. Wichtig ist mir aber im Moment, das ich alle Fehler finde und das so wie es jetzt ist, einwandfrei läuft.

    Darum, wenn es jemand nutzt, bitte gebt Feedback. Egal ob positiv oder negativ. Ich freue mich persönlich natürlich mehr über positives Feedback 🙂

  • 0 Stimmen
    2 Beiträge
    213 Aufrufe
    FrankMF

    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

  • 0 Stimmen
    1 Beiträge
    129 Aufrufe
    Niemand hat geantwortet
  • Restic UI - Documentation

    Restic UI
    1
    0 Stimmen
    1 Beiträge
    206 Aufrufe
    Niemand hat geantwortet
  • Restic UI - kurzes Video

    Linux
    1
    0 Stimmen
    1 Beiträge
    166 Aufrufe
    Niemand hat geantwortet