使用 PyQt5 创建 GUI 界面时,我们有时需要调整复选框的样式,比如在鼠标悬停时改变它的指示器皮肤。本文会详细讲解如何实现这个功能,并提供两个示例说明。
1. 安装 PyQt5
要使用 PyQt5 实现复选框功能,首先需要在本地环境中安装 PyQt5 库。可以使用 pip 命令轻易地进行安装:
pip install PyQt5
2. 创建 GUI 窗口
为了实现复选框功能,我们需要先创建一个简单的 GUI 窗口。这里我们使用 PyQT5 的 QtWidgets 模块来加载窗口和控件。
以下是创建一个窗口、插入文本框和复选框的代码:
from PyQt5 import QtWidgets, QtCore
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5 Checkbox Demo")
self.setGeometry(100, 100, 350, 150)
# 添加文本框控件
self.textbox = QtWidgets.QLineEdit(self)
self.textbox.setGeometry(QtCore.QRect(20, 20, 300, 32))
# 添加复选框控件
self.checkbox = QtWidgets.QCheckBox('Enable checkbox', self)
self.checkbox.move(20, 70)
版本说明:
- PyQt5 版本:5.15.4
- Python 版本:3.8.5
3. 设置复选框的指示器皮肤
现在我们可以开始设置复选框的指示器皮肤。在默认情况下,复选框的指示器皮肤为系统默认值。
以下是为复选框的指示器皮肤使用 CSS 样式的代码:
stylesheet = """
QCheckBox::indicator
{
width: 20px;
height: 20px;
}
QCheckBox::indicator::unchecked
{
image: url(unchecked.png);
}
QCheckBox::indicator::checked
{
image: url(checked.png);
}
QCheckBox::indicator::hover
{
image: url(hover.png);
}
"""
self.checkbox.setStyleSheet(stylesheet)
在上述代码中,我们首先设置指示器大小为 20x20 像素,然后定义未选中(unchecked)、选中(checked)和鼠标悬停(hover)时的指示器皮肤。并将 CSS 样式设置为复选框的样式表。
在这个例子中,我们使用 url()
函数引用了三个图片文件:unchecked.png、checked.png 和 hover.png,分别表示了未选中、选中和鼠标悬停状态下的复选框样式。
4. 为复选框添加鼠标悬停事件
最后,我们需要为复选框添加鼠标悬停事件。当鼠标悬停在复选框上方时,我们将修改复选框指示器的皮肤。
def set_checkbox_style(self):
checkbox_state = self.checkbox.isChecked()
stylesheet = """
QCheckBox::indicator
{
width: 20px;
height: 20px;
}
QCheckBox::indicator::unchecked
{
image: url(unchecked.png);
}
QCheckBox::indicator::checked
{
image: url(checked.png);
}
QCheckBox::indicator::hover
{
image: url(hover.png);
}
"""
if checkbox_state:
checked_icon = QtGui.QIcon("checked.png")
self.checkbox.setIcon(checked_icon)
else:
self.checkbox.setIcon(QtGui.QIcon())
self.checkbox.setStyleSheet(stylesheet)
self.checkbox.setIconSize(QtCore.QSize(20, 20))
self.checkbox.enterEvent = self.set_checkbox_style
self.checkbox.leaveEvent = self.set_checkbox_style
在上述代码中,我们使用 enterEvent
和 leaveEvent
事件处理程序为复选框添加了鼠标悬停事件。当鼠标指针进入或退出复选框控件时,set_checkbox_style
方法被调用来设置指示器的皮肤。
您还可以添加其他的事件处理程序,例如单击事件,设置底层逻辑。下面是一个具有两个复选框的完整示例:
from PyQt5 import QtWidgets, QtGui, QtCore
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5 Checkbox Demo")
self.setGeometry(100, 100, 350, 150)
# 添加文本框控件
self.textbox = QtWidgets.QLineEdit(self)
self.textbox.setGeometry(QtCore.QRect(20, 20, 300, 32))
# 添加第一个复选框控件
self.checkbox1 = QtWidgets.QCheckBox('Enable checkbox 1', self)
self.checkbox1.move(20, 70)
self.checkbox1.enterEvent = self.set_checkbox_style
self.checkbox1.leaveEvent = self.set_checkbox_style
# 添加第二个复选框控件
self.checkbox2 = QtWidgets.QCheckBox('Enable checkbox 2', self)
self.checkbox2.move(160, 70)
self.checkbox2.enterEvent = self.set_checkbox_style
self.checkbox2.leaveEvent = self.set_checkbox_style
def set_checkbox_style(self, event):
checkbox_state = self.sender().isChecked()
stylesheet = """
QCheckBox::indicator
{
width: 20px;
height: 20px;
}
QCheckBox::indicator::unchecked
{
image: url(unchecked.png);
}
QCheckBox::indicator::checked
{
image: url(checked.png);
}
QCheckBox::indicator::hover
{
image: url(hover.png);
}
"""
if checkbox_state:
checked_icon = QtGui.QIcon("checked.png")
self.sender().setIcon(checked_icon)
else:
self.sender().setIcon(QtGui.QIcon())
self.sender().setStyleSheet(stylesheet)
self.sender().setIconSize(QtCore.QSize(20, 20))
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = Window()
window.show()
app.exec_()
在这个完整示例中,我们创建了一些复选框,并为它们添加了 CSS 样式和鼠标事件处理程序。您可以使用 checkbox.stateChanged.connect()
方法来在选中或取消选中复选框时执行其他逻辑。
整个过程都是使用了 PyQT5 的 QtCore、QtGui 和 QtWidgets 模块的方法完成,感兴趣的读者可以进行更改和深度探究。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – 当鼠标悬停时设置复选框指示器的皮肤 - Python技术站