在PyQt5中,可以使用QtCore.Qss样式表来修改控件的外观。如果想为未选中的复选框设置皮肤,当被按下时,可以使用如下步骤:
- 导入必须的PyQt5模块
from PyQt5 import QtCore, QtWidgets
- 创建一个QCheckBox控件
checkbox = QtWidgets.QCheckBox()
- 定义样式表
可以使用以下样式表指定未选中和按下后的复选框皮肤:
stylesheet = '''
QCheckBox::unchecked {
image: url(unchecked.png);
}
QCheckBox::checked {
image: url(checked.png);
}
QCheckBox::indicator:unchecked:hover {
image: url(unchecked_hover.png);
}
QCheckBox::indicator:checked:hover {
image: url(checked_hover.png);
}
'''
这里可以通过 image
属性来指定皮肤图片的路径,样式表中包含了 未选中、选中、未选中并被按下、选中并被按下 四种状态的控件样式。
- 设置控件样式表
将样式表应用于 QCheckBox 控件,即可修改其外观:
checkbox.setStyleSheet(stylesheet)
以下是一个完整的示例,展示了如何创建一个具有皮肤效果的复选框:
from PyQt5 import QtWidgets
class CheckBox(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('CheckBox Demo')
# 创建一个QCheckBox控件
self.checkbox = QtWidgets.QCheckBox()
# 定义样式表
stylesheet = '''
QCheckBox::unchecked {
image: url(unchecked.png);
}
QCheckBox::checked {
image: url(checked.png);
}
QCheckBox::indicator:unchecked:hover {
image: url(unchecked_hover.png);
}
QCheckBox::indicator:checked:hover {
image: url(checked_hover.png);
}
'''
# 设置样式表
self.checkbox.setStyleSheet(stylesheet)
# 布局
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(self.checkbox)
self.setLayout(vbox)
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = CheckBox()
window.show()
app.exec_()
除此之外,QCheckBox 的皮肤还可以通过代码实时修改。例如,我们可以在按钮被按下时,改变其背景色:
class CheckBox(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('CheckBox Demo')
# 创建一个QCheckBox控件
self.checkbox = QtWidgets.QCheckBox()
# 定义样式表
stylesheet = '''
QCheckBox::unchecked {
background-color: white;
}
QCheckBox::checked {
background-color: pink;
}
'''
# 设置样式表
self.checkbox.setStyleSheet(stylesheet)
# 创建一个按钮,用于切换背景色
self.button = QtWidgets.QPushButton('Change to Light Pink')
# 按钮被按下时,改变背景色
self.button.clicked.connect(self.changeBackground)
# 布局
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(self.checkbox)
vbox.addWidget(self.button)
self.setLayout(vbox)
def changeBackground(self):
if self.checkbox.isChecked():
self.checkbox.setStyleSheet('''
QCheckBox::unchecked {
background-color: white;
}
QCheckBox::checked {
background-color: lightpink;
}
''')
else:
self.checkbox.setStyleSheet('''
QCheckBox::unchecked {
background-color: white;
}
QCheckBox::checked {
background-color: pink;
}
''')
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = CheckBox()
window.show()
app.exec_()
在这个示例中,QCheckBox控件的未选中状态背景色为白色,选中状态背景色为粉色。点击按钮后,若复选框处于选中状态,则将其选中状态下的背景色改为浅粉色,否则默认恢复为粉色。