Вы можете создать pyqtProperty, который указывает, что пароль действителен или нет.
from PyQt5 import QtCore, QtGui, QtWidgets
qss = '''
ValidationLineEdit[echoMode="2"][isValid="true"] {
color: green;
}
ValidationLineEdit[echoMode="2"][isValid="false"] {
color: red;
}
'''
class ValidationLineEdit(QtWidgets.QLineEdit):
valid_length_changed = QtCore.pyqtSignal(int)
def __init__(self, *args, **kwargs):
valid_length = 0
if kwargs.get("valid_length"):
valid_length = kwargs.pop("valid_length")
super(ValidationLineEdit, self).__init__(*args, **kwargs)
self._valid_length_ = valid_length
self.textChanged.connect(self.update_stylesheet)
@QtCore.pyqtProperty(bool)
def isValid(self):
if self.valid_length == 0: return False
return len(self.text()) == self.valid_length
def update_stylesheet(self):
self.style().unpolish(self)
self.style().polish(self)
def valid_length(self):
return self._valid_length_
def set_valid_length(self, lenght):
if self._valid_length_ == lenght: return
self._valid_length_ = lenght
self.valid_length_changed.emit(lenght)
valid_length = QtCore.pyqtProperty(int, fget=valid_length, fset=set_valid_length, notify=valid_length_changed)
class CreateUserDialog(QtWidgets.QDialog):
def __init__(self, parent=None):
super(CreateUserDialog, self).__init__(parent)
self.username_edit = QtWidgets.QLineEdit(placeholderText="Username")
self.pwd_edit = QtWidgets.QLineEdit(placeholderText="Password", echoMode=QtWidgets.QLineEdit.Password)
self.confirm_pwd_edit = ValidationLineEdit(placeholderText="Confirm password", echoMode=QtWidgets.QLineEdit.Password)
lay = QtWidgets.QVBoxLayout(self)
lay.addSpacing(30)
lay.addWidget(QtWidgets.QLabel("Create a new account"))
lay.addWidget(self.username_edit)
lay.addWidget(self.pwd_edit)
lay.addWidget(self.confirm_pwd_edit)
self.pwd_edit.editingFinished.connect(self.on_editingFinished)
@QtCore.pyqtSlot()
def on_editingFinished(self):
self.confirm_pwd_edit.valid_length = len(self.pwd_edit.text())
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(qss)
w = CreateUserDialog()
w.show()
sys.exit(app.exec_())