PyQt5:一次更改多个对象的布局

问题描述 投票:0回答:1

好的,所以我有一个QMainWindow对象是我的窗口,它包含几个QLineEdit对象。根据条件,单个QLineEdit对象可以更改其颜色(颜色:红色,如果错误)。我正试图找到一种方法,在按下按钮时将所有QLineEdit对象的颜色重置为黑色(默认)。现在,我将它们全部放在一个列表中并迭代它们,这是低效的,因为我有~60个QLineEdit对象。

我正在寻找一种方法来立即为我窗口中的所有QLineEdit对象全局更改样式表。

Ui_MainWindow是由Qt Designer自动生成并导入的类。 Qt Desginer告诉我,我对我的班级MainWindow进行了所有更改,而不是Ui_MainWindow。

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)')
python pyqt pyqt5
1个回答
0
投票

你可以尝试这样的东西,但我不确定它会有多快。

我把连接方法更改为line.textChanged.connect(self.validate)虽然你可以改变它们在element.setProperty函数中使用validate

将前两行添加到__init__方法中。

    self.setStyleSheet('QLineEdit[validated=true]{color: rgb(255,0,0)}')
    self.lineEdits = (x for x in self.centralWidget().children()
                      if isinstance(x, QLineEdit))

# If text meets a condition, paint it red
def validate(self, element):
    if element == 'foo':
        self.sender().setProperty('validated',True)
    else:
        self.sender().setProperty('validated',False)
    self.sender().setStyle(self.style())

def invalidate(self, element):
    element.setProperty('validated', False)
    element.setStyle(element.style())
    return element


def open_file_dialog(self):
   self.reset_stylesheet()


def reset_stylesheet(self):
    tuple(map(self.invalidate, self.lineEdits))

或者你可以添加

self.setStyleSheet('QLineEdit{color:#FFF};')reset_stylesheet()功能

self.setStyleSheet('QLineEdit{color:#F00};')在验证部分。

© www.soinside.com 2019 - 2024. All rights reserved.