Хорошо, у меня есть объект QMainWindow, который является моим окном и содержит несколько объектов QLineEdit. В зависимости от условия, один объект QLineEdit может изменить свой цвет (цвет: красный, если ошибка). Я пытаюсь найти способ восстановить цвет всех объектов QLineEdit обратно в черный (по умолчанию) при нажатии кнопки. Прямо сейчас я собираю их все в один список и перебираю их, что неэффективно, потому что у меня ~ 60 объектов QLineEdit.
Я ищу способ изменения таблицы стилей глобально для всех объектов QLineEdit в моем окне, сразу.
Ui_MainWindow - это класс, который автоматически генерируется Qt Designer и импортируется. Я делаю все изменения в своем классе MainWindow, а не Ui_MainWindow, как мне подсказывает Qt Desginer.
from PyQt5.QtWidgets import QMainWindow
from Windows.main_window import Ui_MainWindow
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Input validation
self.ui.lineEdit.textChanged.connect(lambda: self.validate(self.ui.lineEdit))
self.ui.lineEdit_2.textChanged.connect(lambda: self.validate(self.ui.lineEdit_2))
self.ui.lineEdit_3.textChanged.connect(lambda: self.validate(self.ui.lineEdit_3))
# Open file button
self.ui.pushButton_Open.clicked.connect(self.open_file_dialog)
self.show()
# If text meets a condition, paint it red
def validate(self, element):
if element.text() == 'foo':
element.setStyleSheet('color: rgb(255,0,0)')
def open_file_dialog(self):
self.reset_stylesheet()
...
def reset_stylesheet(self):
ui_elements = [self.ui.lineEdit, self.ui.lineEdit_2, self.ui.lineEdit_3]
for element in ui_elements:
element.setStyleSheet('color: rgb(0,0,0)')