Skip to content

Python3 - QSettings

Python3
  • Ich habe in meinen Projekten, verschiedene Einträge die man ständig braucht und sich merken möchte, in eine JSON-Datei gespeichert. Danach habe ich diese wieder ausgelesen, wenn ich sie benötigte.

    Beim Verbessern meiner Anwendungen, bin ich dann über QSettings gestolpert.

    The QSettings class provides persistent platform-independent application settings

    Damit sollte klar sein, was es macht. Es speichert dauerhaft Daten in einer Datei.

    Zum Benutzen der Klasse brauchen wir folgendes in unserem Projekt.

    from PyQt5.QtCore import QSettings
    

    Danach habe ich mir zwei Funktionen geschrieben um das flexibel nutzen zu können.

    def get_value_settings(self, entry_name):     
          entry_value = settings.value(entry_name, True)
          return entry_value    
          
    def set_value_settings(self, entry_name, entry_value):
          settings.setValue(entry_name, entry_value)
    

    Erste Funktion holt den Inhalt eines Eintrages, die zweite Funktion setzt einen Eintrag.

    Eintrag setzen

    a = 'TEST';
    b = '123456';    
    set_value_settings(self, a, b)
    
    c = 'TEST2';
    d = '456789';
    set_value_settings(self, c, d)
    

    Eintrag lesen

    e = 'TEST2'
    result = get_value_settings(self, e)
    print("Result:", result)
    

    Ausgabe

    Result: 456789
    

    Inhalt der Datei

    [General]
    TEST=123456
    TEST2=456789
    

    Finde ich sehr praktisch und einfach zu verarbeiten. Das werde ich dann mal vollständig einbauen.

  • Python - Formatumwandlung str -> float

    Python3
    1
    0 Stimmen
    1 Beiträge
    138 Aufrufe
    Niemand hat geantwortet
  • Python - Frameworks

    Python3
    2
    0 Stimmen
    2 Beiträge
    76 Aufrufe
    FrankMF

    Und mal hier parken

  • Python - Match-Case Statement

    Python3
    1
    0 Stimmen
    1 Beiträge
    82 Aufrufe
    Niemand hat geantwortet
  • PyQt6 - QRegularExpressionValidator

    Python3
    1
    0 Stimmen
    1 Beiträge
    358 Aufrufe
    Niemand hat geantwortet
  • PyQt6 - QSettings

    Python3
    3
    0 Stimmen
    3 Beiträge
    205 Aufrufe
    FrankMF
    Möglichkeit 1

    Das hier

    settings = QSettings("Frank_Mankel", "Restic_UI")

    erzeugt unter

    /home/frank/.config/Frank_Mankel/Restic_UI.conf

    die Konfigurationsdatei.

    Möglichkeit 2

    Das hier

    settings = QSettings("Restic_UI")

    erzeugt unter

    /home/frank/.config/Restic_UI.conf

    die Konfigurationsdatei.

    Damit habe ich die grundlegenden Dinge, hoffentlich 😉 , verstanden.

    Für den Rest mal in die Dokumentation schauen.

    Sehr hilfreich war auch mal ein Blick auf die Definition der Klasse. Rechtsklick auf QSettings und dann Go to Definition

    class QSettings(QObject): class Scope(enum.Enum): UserScope = ... # type: QSettings.Scope SystemScope = ... # type: QSettings.Scope class Format(enum.Enum): NativeFormat = ... # type: QSettings.Format IniFormat = ... # type: QSettings.Format InvalidFormat = ... # type: QSettings.Format class Status(enum.Enum): NoError = ... # type: QSettings.Status AccessError = ... # type: QSettings.Status FormatError = ... # type: QSettings.Status [..gekürzt..]
  • 0 Stimmen
    3 Beiträge
    302 Aufrufe
    FrankMF

    Kein globalen Variablen mehr im Projekt 🙂

    Das Widget ließ sich relativ einfach erledigen.

    Vorher #----QPlainTextEdit ----# layout = QVBoxLayout() widget = QTextEdit() widget.setReadOnly(True) widget.setLayout(layout) setCentralWidget(widget) Nachher #----QPlainTextEdit ----# layout = QVBoxLayout() self.widget = QTextEdit() self.widget.setReadOnly(True) self.widget.setLayout(layout) self.setCentralWidget(self.widget)

    Aufruf dann nicht mehr mit

    # UI widget.setHtml("")

    sondern mit

    # UI mainWin.widget.setHtml("")

    Problem erledeigt und hoffentlich auch verstanden 😉

  • Python3 - Eingabeformular

    Python3
    3
    0 Stimmen
    3 Beiträge
    190 Aufrufe
    FrankMF

    Meine endgültige Lösung, zu mindestens im Moment 😉 , ist ein zweites Window. Das gefällt mir am Besten, komme ich zu mindestens im Moment einfach besser mit klar. Aber, eines der größten Probleme war für mich, wie aktualisiere ich die Liste im Hauptfenster!? Da habe ich doch etliche Stunden dran rum gefummelt....

    Hier nur mal das Layout

    ##################### # Layout ##################### self.formGroupBox = QGroupBox("Form layout") layout = QFormLayout() layout.addRow(self.label_1) layout.addRow(QLabel("Backup Name:"), self.input1) layout.addRow(QLabel("Repository:"), self.button3) layout.addRow(QLabel("Source:"), self.button4) layout.addRow(QLabel("Password:"), self.input4) layout.addRow(self.label_6) layout.addRow(self.button2) self.formGroupBox.setLayout(layout) self.setLayout(layout)

    Das mit dem SecondWindow ist aber was aufwändiger. Da mach ich dann mal einen eigenen Beitrag zu. Aktuell sieht das so aus.

    6c68c956-9127-438f-bc54-4dcef8e18f00-image.png

  • Python3 - RegEx für ein LineEdit

    Python3
    2
    0 Stimmen
    2 Beiträge
    153 Aufrufe
    FrankMF

    Gut, Menschen die mich kennen, wissen das IPv6 nicht so mein Spezialgebiet ist. Es hilft aber nichts, auch damit muss man sich beschäftigen 🙂

    Es war etwas schwierig was Passendes zu finden, aber ich denke das hier ist ganz gut. Ob es alle Möglichkeiten bei IPv6 beinhaltet, weiß ich nicht zu 100%.

    Hier eine Seite, wo ich was Passendes gefunden habe.
    https://ihateregex.io/expr/ipv6/

    Code # regex für IPv6 reg_ex = QRegExp('^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$') input_validator = QRegExpValidator(reg_ex, self.lineedit2_ipv6) self.lineedit2_ipv6.setValidator(input_validator)

    Ein paar Test von mir ergaben, das es so aussieht als wenn es funktioniert 🙂