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
Nehmen wir an, wir haben einen QLineEdit und wollen die Eingabe kontrollieren. Als Beispiel soll eine IPv4 Adresse dienen.
from PyQt5.QtCore import QRegExp
from PyQt5.QtGui import QRegExpValidator
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.
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.
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
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/
# 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