PYQT5 将所有标签设置为黑色

PYQT5 set all labels to black

我有几个控制各种程序的复选框,一旦代码有 运行 所有成功的复选框都显示为绿色,例如self.cbMarkerDetection.setStyleSheet("color: green;") 进入下一个作业时,我想将颜色重置为黑色。显然我可以为每个复选框做 self.cbMarkerDetection.setStyleSheet("color: black;")...但我希望有一些方法可以做类似的事情:

for checkbox in allcheckboxes:
    self.checkbox.setStyleSheet("color: black;")

A​​ simple coded example, two check boxes, when selected it goes green in colour, when I click the other check box I want all to change back to black, imagine checkboxes a-g, when checkbox (or a button if you like) 是 selected/checked 当复选框 z(或按钮)是 selected/clicked 时,选中的变为绿色,所有现有的复选框变为黑色。如上所述,我可以列出所有复选框并将它们设置为黑色,但我正在寻找一种使用更少代码的更快方法:

import sys
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QCheckBox, QWidget
from PyQt5.QtCore import QSize    

class ExampleWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(140, 40))    
        self.setWindowTitle("Checkbox") 

        self.a = QCheckBox("box1",self)
        self.a.stateChanged.connect(self.clickBox)
        self.a.move(20,20)
        self.a.resize(320,40)

        self.b = QCheckBox("box2",self)
        self.b.stateChanged.connect(self.clickBox)
        self.b.move(20,80)
        self.b.resize(320,40)

    def clickBox(self, state):

        if state == QtCore.Qt.Checked:
            print('Checked')
            self.checkbox.setStyleSheet("color: green;")
        else:
            print('Unchecked')

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = ExampleWindow()
    mainWin.show()
    sys.exit( app.exec_() )

最简单的解决方案是使用 findChildren():

for checkbox in self.findChildren(QCheckBox, options=Qt.FindDirectChildrenOnly):
    checkbox.setStyleSheet("color: black;")

如果您的小部件中有 其他 复选框不应包含在列表中,您可以创建一个空子class 并将其用于过滤器:

class MyCheckBox(QCheckBox): pass

# ...

self.a = MyCheckBox("box1", self)
# etc...

然后使用具有自定义 class 名称的 findChildren:

for checkbox in self.findChildren(MyCheckBox, options=Qt.FindDirectChildrenOnly):
    checkbox.setStyleSheet("color: black;")

请注意,不鼓励使用固定几何图形,您应该更喜欢 layout managers