Skip to content

Python3 - QSettings

Python3
1 1 193
  • 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 - mehrsprachiges GUI

    Python3 python3
    1
    1
    0 Stimmen
    1 Beiträge
    237 Aufrufe
    Niemand hat geantwortet
  • Python3 - Pipenv für die virtuelle Entwicklungsumgebung

    Python3 python3 pipenv
    2
    1
    0 Stimmen
    2 Beiträge
    479 Aufrufe
    FrankMF
    Ich ko... immer, wenn ich mein VSCodium neu installieren muss. Das größte Problem dabei ist immer, das ich fast immer vergesse den Python Interpreter zu setzen. "CTRL+SHIFT+P" and choose the correct python interpreter. [image: 1656256156412-46f85075-4dbc-414c-94c2-abc5bb6009b6-grafik.png] Danach startet das Python Programm auch wieder aus der richtigen Entwicklungsumgebung
  • PyQt5 - QThread

    Python3 pyqt5 python3
    3
    0 Stimmen
    3 Beiträge
    329 Aufrufe
    FrankMF
    Und hier mal ein komplettes Beispiel. class Worker Wir legen den Worker an, das ist der Prozess der die Arbeit macht und etwas länger braucht. class Worker(QObject): """ Worker Class for Rest function stats""" stats_finished = pyqtSignal(str) stats_error = pyqtSignal(str) def __init__(self): super().__init__() def run(self): # Restic function try: # long running task except Exception: # Process don't successful, send signal self.stats_error.emit(result.stderr) else: # Process successful, send signal self.stats_finished.emit(result.stdout) finally: pass in class MainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() "First Thread with documentation" # Worker for restic_stats # Create a QThread object self.thread = QThread() # Create a worker object self.worker1 = Worker() # Move worker to the thread self.worker1.moveToThread(self.thread) # Connect signals and slots self.thread.started.connect(self.worker1.run) self.worker1.stats_finished[str].connect(self.restic_stats_finished) self.worker1.stats_error[str].connect(self.restic_stats_error) "First thread end" ############################################### # Process for restic_stats is finished ############################################### @pyqtSlot(str) def restic_stats_finished(self, i): # Signal from worker thread without an error Spinner.stop(self) self.thread.quit() ############################################### # Process for restic_stats when get an error ############################################### @pyqtSlot(str) def restic_stats_error(self, i): # Signal from worker thread with an error! Spinner.stop(self) Funktion restic_stats def restic_stats(self): # we start the worker thread self.thread.start() # we start waitingspinnerwidget Spinner.start(self) Ich wollte gerade schreiben, das folgendes sehr wichtig ist self.thread.quit() da fällt mir ein Fehler auf. Kurz ausprobiert und bingo, wenn der Prozess einen Error triggert, muss natürlich auch der Prozess beendet werden. Wenn man das nicht macht, macht das Programm nicht das was es soll. Der Grund ist, das der Prozess einfach immer weiter läuft. Er MUSS beendet werden. Ich gehe dann mal in meinem Programm alles ändern Ok, jetzt geht die Funktion auch zweimal hintereinander und gibt auch ordentlich den Fehler aus. Fazit Ich habe wieder sehr viel gelernt und hoffe das ich es auch richtig verstanden habe Hoffe das es dem ein oder anderen Anfänger hilft. Und falls hier ein Profi mitliest und hier Blödsinn steht bitte ich um einen Kommentar, damit ich das ändern kann. Es steht schon genug Blödsinn im Netz
  • Python3 - PyQt5 QIcon

    Python3 pyqt5 python3
    2
    2
    0 Stimmen
    2 Beiträge
    215 Aufrufe
    FrankMF
    Die Suchpfade findet man hiermit print(QIcon.themeSearchPaths()) Ausgabe ['/home/frank/.icons', '/usr/share/cinnamon/icons', '/var/lib/flatpak/exports/share/icons', '/usr/share/icons', ':/icons']
  • Restic UI - Changelog

    Angeheftet Restic UI restic-ui python3 pyqt5
    3
    0 Stimmen
    3 Beiträge
    407 Aufrufe
    FrankMF
    v1.5.0 - Release for restic v0.14.0 with compression and migration tool
  • Python3 - RegEx für ein LineEdit

    Python3 pyqt5 python3
    2
    1
    0 Stimmen
    2 Beiträge
    258 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
  • Python3 - zwei Webseiten als Empfehlung

    Python3 pyqt5 python3
    1
    0 Stimmen
    1 Beiträge
    209 Aufrufe
    Niemand hat geantwortet
  • Wichtige Links

    Angeheftet Python3 python3
    1
    0 Stimmen
    1 Beiträge
    233 Aufrufe
    Niemand hat geantwortet