Skip to content

Python3 - RegEx für ein LineEdit

Python3
  • Nehmen wir an, wir haben einen QLineEdit und wollen die Eingabe kontrollieren. Als Beispiel soll eine IPv4 Adresse dienen.

    import

    from PyQt5.QtCore import QRegExp
    
    from PyQt5.QtGui import QRegExpValidator
    

    Objekt

    self.lineedit1_ipv4 = QLineEdit(str(root[0][0].text), self)
    

    Nicht verwirren lassen, das

    str(root[0][0].text)
    

    lädt aus einer XML Datei, die mir als Config dient, abgespeicherte Werte.

    Validator

    reg_ex = QRegExp("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")
            input_validator = QRegExpValidator(reg_ex, self.lineedit1_ipv4)
            self.lineedit1_ipv4.setValidator(input_validator)
    

    Das reg_ex dient als Vorlage, was gefiltert werden soll. Nein, das habe ich nicht erfunden 🙂 das kann man im Netz fertig finden. z.B. hier -> https://www.oreilly.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html

    Mit dem input_validator wird ein Objekt erzeugt, dieses beinhaltet den reg_ex und die QLineEdit Zeile, auf die das angewendet werden soll.

    In der nächsten Zeile, wenden wir das auf self.lineedit1_ipv4 an.

    Als Resultat kann man nur noch IP-Adressen bis zu 255.255.255.255 eingeben. Wollte man 256. eingeben, würde die 6 schon geblockt.

    e58383f4-fbe5-41e6-8b0d-0e48c3ff7b28-grafik.png

    Schönes Beispiel, mit dem ich sehr gut Eingabefelder filtern kann. So, die Python3 Stunde für heute beendet. 🙂 Auf dem Bild seht ihr dann, was Morgen auf dem Stundenplan steht 😉

    Quellen

    Regex

    stackoverflow

  • 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 - Pipenv für die virtuelle Entwicklungsumgebung

    Python3
    2
    0 Stimmen
    2 Beiträge
    342 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.

    46f85075-4dbc-414c-94c2-abc5bb6009b6-grafik.png

    Danach startet das Python Programm auch wieder aus der richtigen Entwicklungsumgebung 🙂

  • Python3 - Struktur eines Projektes

    Python3
    1
    0 Stimmen
    1 Beiträge
    127 Aufrufe
    Niemand hat geantwortet
  • Python3 - QT_QPA_PLATFORM

    Python3
    2
    0 Stimmen
    2 Beiträge
    325 Aufrufe
    FrankMF

    Nachdem ich ja mittlerweile schon lange weder auf Cinnamon bin, hatte ich nach einem Update von VSCodium wieder ein anderes Design. Ok, schauen wir rein.

    (venv) frank@frank-MS-7C37:~/restic-ui-public$ env | grep "QT" QT_ACCESSIBILITY=1 QT_QPA_PLATFORMTHEME=qt5ct

    Wenn ich das auf

    QT_QPA_PLATFORMTHEME=gnome3

    ändere, sieht es wie auf meinem Linux Mint Cinnamon Desktop aus.

  • Python3 - QSettings

    Python3
    1
    0 Stimmen
    1 Beiträge
    149 Aufrufe
    Niemand hat geantwortet
  • Python3 - String-Operatoren

    Python3
    1
    0 Stimmen
    1 Beiträge
    141 Aufrufe
    Niemand hat geantwortet
  • Python3 - Eingabeformular

    Python3
    3
    0 Stimmen
    3 Beiträge
    208 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

  • Wireguard UI - mein erstes Python3 Projekt

    Python3
    2
    0 Stimmen
    2 Beiträge
    225 Aufrufe
    FrankMF

    Dinge entwickeln sich. Es sieht alles schon wieder was anders aus 🙂

    Hauptfenster
    270b5c68-3d64-44ca-9a01-e3f24ba4a26c-grafik.png

    Setup Fenster zum Erstellen der wg0.conf
    27c3cb28-50f5-4e00-b03d-de47c07372a0-grafik.png

    Und alles funktioniert so weit 🤓

  • Python und GUI

    Verschoben Python3
    1
    0 Stimmen
    1 Beiträge
    161 Aufrufe
    Niemand hat geantwortet