Skip to content

PyQt6 - QRegularExpressionValidator

Python3
  • Wenn man QLineEdit Felder baut, möchte man manchmal den User zwingen nur ganz bestimmte Eingaben zu machen.

    self.input6 = QLineEdit(str(restic_keep_monthly), self)
    

    In diesem Feld kann man einstellen, wie viele Monate Restic beim Prunen aufheben soll. Damit behält Restic von jedem Monat einen Snapshot, der Rest wird gelöscht. Jetzt möchte ich das gerne auf die letzten 12 Monate begrenzen.

    Jetzt der Teil, der dafür zuständig ist, das zu überwachen.

            from PyQt6.QtGui import QIcon, QRegularExpressionValidator
            from PyQt6 import QtCore
    
            rx = QtCore.QRegularExpression('^([1-9]|[1-1][0-2])$')
            v = QRegularExpressionValidator(rx, self.input7)
            self.input7.setValidator(v)
    

    Das habe ich so zusammengebaut anhand des folgenden Beitrages.

    If you want to restrict valid input to integer values between 1 and 100, this will do it:
    ^([1-9]|[1-9][0-9]|100)$
    Explanation:
    ^ = start of input
    () = multiple options to match
    First argument [1-9] - matches any entries between 1 and 9
    | = OR argument separator
    Second Argument [1-9][0-9] - matches entries between 10 and 99
    Last Argument 100 - Self explanatory - matches entries of 100
    This WILL NOT ACCEPT: 1. Zero - 0 2. Any integer preceded with a zero - 01, 021, 001 3. Any integer greater than 100
    Quelle: https://stackoverflow.com/questions/2616974/limit-length-of-characters-in-a-regular-expression

    Mein Ausdruck

    ([1-9]|[1-1][0-2])
    
    • [1-9] erlaubt 1 - 9
    • |[1-1][0-2] erlaubt 10,11 und 12

    Ja, ich weiß ich muss dringend an den Namen der Variablen usw. arbeiten, so rx und v ist in Python nicht gerne gesehen.