Skip to content

Python3 - RegEx für ein LineEdit

Python3
2 1 241
  • 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 🙂

  • PyQt6 - QRegularExpressionValidator

    Python3 pyqt6 python3
    1
    0 Stimmen
    1 Beiträge
    664 Aufrufe
    Niemand hat geantwortet
  • Python3 - PyQt5 QIcon

    Python3 pyqt5 python3
    2
    2
    0 Stimmen
    2 Beiträge
    195 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 - User documentation

    Restic UI restic-ui python3 pyqt5
    1
    7
    0 Stimmen
    1 Beiträge
    294 Aufrufe
    Niemand hat geantwortet
  • Python3 - Global variable 'widget' undefined at the module level

    Python3 python3
    3
    0 Stimmen
    3 Beiträge
    471 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 - subprocess.Popen

    Python3 restic python3
    1
    0 Stimmen
    1 Beiträge
    346 Aufrufe
    Niemand hat geantwortet
  • Python3 - JSON

    Python3 python3
    3
    1
    0 Stimmen
    3 Beiträge
    268 Aufrufe
    FrankMF
    [image: 1603645936018-ede1a88a-5183-4f85-a602-27650362d532-grafik.png] Die Backups sollen Namen haben, also habe ich das erweitert. Jetzt sollen diese als Liste rechts angezeigt werden. Das mache ich wie folgt. for key in backups: print(backups[key]['name'], key) liste = backups[key]['name'] + " ID: " + key self.listWidget.addItem(liste) Mittels des Keys kann ich auf den Namen zugreifen und die Liste damit füllen. Aktuell habe ich noch den Key hinten angefügt, weil ich noch keine Idee habe, wie ich die Backups anders verarbeiten soll. Aber, Stück für Stück. Der Backup-Name wird nach Auswahl in der Statusbar angezeigt. So weit klappt das so wie ich mir das vorstelle. Für heute ist Feierabend
  • Wichtige Links

    Angeheftet Python3 python3
    1
    0 Stimmen
    1 Beiträge
    224 Aufrufe
    Niemand hat geantwortet
  • Python und GUI

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