Einsatz von QValidator

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
BlackJack

@Sophus: Bei einem `QTextEdit` kann man einfach testen ob das enthaltene `QTextDocument` leer ist oder nicht.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@BlackJack:

Meinst du etwa so? (ungetestet):

Code: Alles auswählen

def on_text_change(self, _text):
        self.ui_pp_login.pushButtonSend.setEnabled(
            self.lineEditSubject.text() != ""
            and self.textEditFeedback.toPlainText() != ""
        )
Ich habe mich hierbei an deinem vorherigen Beispiel gehalten.
Zuletzt geändert von Sophus am Donnerstag 19. März 2015, 16:38, insgesamt 1-mal geändert.
BlackJack

@Sophus: Beim `QLineEdit` würde ich wohl weiterhin beim Validator bleiben, vielleicht einer der Prüft ob mindestens ein nicht-Whitespace-Zeichen eingeben wurde.

Bei `QTextEdit` würde ich wie gesagt testen ob das enthaltene `QTextDocument` Zeichen enthält. Klar könnte man sich da auch bei jeder Änderung den gesamten Textinhalt geben lassen. Ich hätte halt die Hoffnung das die Anzahl der Zeichen effizienter ermittelt werden kann.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@BlackJack:

Ich habe erst einmal eine "Zwischenlösung":

Code: Alles auswählen

        self.ui_pp_feedback.lineEditSubject.setStyleSheet('background-color: #fff79a;')
        self.ui_pp_feedback.lineEditSubject.textChanged.connect(self.on_text_change)
        self.ui_pp_feedback.lineEditSubject.setValidator(QRegExpValidator(QRegExp("[r'\w'aA-zZ0-9 ]+"), self.lineEditSubject))
[...]
    def on_text_change(self):
            self.ui_pp_feedback.pushButtonSend.setEnabled(
                self.lineEditSubject.text() != ""
                and self.textEditFeedback.toPlainText() != "")

            if not self.ui_pp_feedback.lineEditSubject.text() != "":
                self.ui_pp_feedback.lineEditSubject.setStyleSheet('background-color: #fff79a;') # yellow
            else:
                self.ui_pp_feedback.lineEditSubject.setStyleSheet('background-color: #c4df9b;') # green

            if not self.ui_pp_feedback.textEditFeedback.toPlainText() != "":
                self.ui_pp_feedback.textEditFeedback.setStyleSheet('background-color: #fff79a;') # yellow
            else:
                self.ui_pp_feedback.textEditFeedback.setStyleSheet('background-color: #c4df9b;') # green
Nun, mittels QRegExpValidator legeich fest, dass zum Beispiel Leerzeichen, Zahlen und Buchstaben, sogar Umlaute erlaubt sind. Das alles nur in der Betreffzeile. Ich habe gehofft, dass ich mit dem textEditFeedback-Widget genauso verfahren kann. Dafür kennt dieses Widget aber die Methode setValidator leider nicht. In der on_text_change-Funktion geht es erst einmal um die Überprüfung der Text-Inhalte, um den Button zu steuern. Im nächsten If-Block wollte ich mit den Farben spielen. Klappt auch alles. Aber ich werde das Gefühl nicht los, dass ich es hätte besser machen können. Irgendwelche Idee?

Problem bei den beiden Texfeldern, ist, da man mit den Leerzeichen hier vorgaukeln kann, dass hier angeblich was gefüllt wird. Wir gehen davon aus, man betätigt in beiden Textfelder unendlich viel die Leertaste - keine Zeichen, Buchstaben und Zahlen. Zum Beispiel lässt lineEditSubject durch den QRegExpValidator zu, dass auch Leerzeichen erlaubt sind. Wenn ich dann durch den Klick auf pushButtonSend überprüfen will, ob die TextFelder auch wirklich nicht leer sind, reicht sicherlich nicht zu überprüfen ob die jeweiligen Felder ="" sind. Wie gesagt, durch die Leertasten (whitespace) kann man den Prüf-Mechanismus getrost überspringen und es wird am Ende doch nur leerer Inhalt versendet.
Antworten