下面是详细讲解 Python 的 PyQt5 模块如何实现“当复选框被按下时为其设置皮肤”的完整使用攻略。本攻略涉及 QCheckBox 控件、StyleSheet、Lambda函数等知识点。
一、需求分析
本次需求是实现当 CheckBox 被选中时,为其设置颜色为红色的皮肤,否则设置为灰色的皮肤。
二、实现思路
我们可以在复选框的信号中添加相应的槽函数,当复选框被选中时,执行设置红色皮肤的操作;否则执行设置灰色皮肤的操作。然后,使用 Stylesheets 设置皮肤。
三、代码实现
第一步:导入所需模块
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import Qt
第二步:继承 QWidget 实现主窗口的自定义
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('CheckBox')
self.show()
第三步:添加 CheckBox 控件
self.cb = QCheckBox('Red', self)
self.cb.toggle()
self.cb.stateChanged.connect(self.changeTitle)
self.cb.move(20, 20)
上述代码中,我们创建了一个 QCheckBox 控件,其文本为“Red”,所在的父控件为当前窗口,且默认被选中。我们还设置了 stateChanged 信号,以便在复选框被选中或取消选中时调用相应的槽函数 changeTitle。最后设置该控件的位置为(20,20)。
第四步:设置皮肤样式
self.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: red;
}
QCheckBox::indicator {
background-color: gray;
}
''')
上述代码中,我们设置了两种状态的 QCheckBox 皮肤,即选中状态和未选中状态。当复选框被选中时,其背景色为红色,未被选中时背景色为灰色。
第五步:添加槽函数
def changeTitle(self, state):
if state == Qt.Checked:
self.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: red;
}
QCheckBox::indicator {
background-color: gray;
}
''')
else:
self.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: gray;
}
QCheckBox::indicator {
background-color: gray;
}
''')
上述代码中,我们定义了一个名为 changeTitle 的槽函数,以实现皮肤的变化。当复选框被选中时,其状态为 Qt.Checked,我们需要设置红色的皮肤。否则,即其状态为 Qt.Unchecked,我们需要设置其为灰色的皮肤。
第六步:运行程序
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
四、示例说明
示例一:单一 CheckBox 控件
我们首先定义一个单一的 CheckBox 控件,然后利用信号和槽函数实现状态的监控和颜色的切换。
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('CheckBox')
self.cb = QCheckBox('Red', self)
self.cb.toggle()
self.cb.stateChanged.connect(self.changeTitle)
self.cb.move(20, 20)
self.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: red;
}
QCheckBox::indicator {
background-color: gray;
}
''')
self.show()
def changeTitle(self, state):
if state == Qt.Checked:
self.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: red;
}
QCheckBox::indicator {
background-color: gray;
}
''')
else:
self.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: gray;
}
QCheckBox::indicator {
background-color: gray;
}
''')
示例二:多个 CheckBox 控件
我们可以定义多个 CheckBox 控件,并借助于 lambda 函数,使其在状态变化时调用对应的槽函数,各自实现自身的颜色切换。
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('CheckBox')
self.createCheckBox('Red', 20, 20)
self.createCheckBox('Green', 20, 50)
self.createCheckBox('Blue', 20, 80)
self.show()
def createCheckBox(self, text, x, y):
cb = QCheckBox(text, self)
cb.toggle()
cb.stateChanged.connect(lambda state, cb=cb: self.changeColor(state, cb))
cb.move(x, y)
def changeColor(self, state, cb):
if state == Qt.Checked:
cb.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: red;
}
QCheckBox::indicator {
background-color: gray;
}
''')
else:
cb.setStyleSheet('''
QCheckBox::indicator:checked {
background-color: gray;
}
QCheckBox::indicator {
background-color: gray;
}
''')
上述代码中,我们通过 createCheckBox 函数创建多个 CheckBox 控件,并使用 lambda 函数将对应的 CheckBox 传递给槽函数 changeColor,使我们在皮肤切换时能够区分各自的 CheckBox 控件。
五、总结
本次攻略介绍了 Python 的 PyQt5 模块如何实现“当复选框被按下时为其设置皮肤”的完整使用攻略。重点介绍了 QCheckBox 控件、StyleSheet、Lambda函数等知识点的应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – 当复选框被按下时为其设置皮肤 - Python技术站