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。
我有几个控制各种程序的复选框,一旦代码有 运行 所有成功的复选框都显示为绿色,例如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。