继承QCheckBox实现一个翘板开关
时间: 2024-05-08 08:01:11 浏览: 15
为了实现翘板开关效果,我们需要重写QCheckBox的paintEvent()方法,并在其中绘制自定义的样式。
以下是一个简单的实现:
```python
from PyQt5.QtWidgets import QCheckBox
from PyQt5.QtGui import QPainter, QColor, QPen, QBrush
from PyQt5.QtCore import Qt
class ToggleSwitch(QCheckBox):
def __init__(self, parent=None):
super().__init__(parent)
self.setFixedSize(60, 30)
self.setStyleSheet("QCheckBox::indicator {width: 0; height: 0;}"
"QCheckBox::indicator:checked {background-color: #00ff00;}"
"QCheckBox::indicator:unchecked {background-color: #ff0000;}")
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.Antialiasing, True)
# 绘制边框
pen = QPen()
pen.setWidth(2)
painter.setPen(pen)
painter.setBrush(Qt.white)
painter.drawRoundedRect(0, 0, self.width(), self.height(), self.height()//2, self.height()//2)
# 绘制翘板
if self.isChecked():
painter.setBrush(QColor(0, 255, 0))
painter.drawRoundedRect(self.width()//2, 0, self.width()//2, self.height(), self.height()//2, self.height()//2)
else:
painter.setBrush(QColor(255, 0, 0))
painter.drawRoundedRect(0, 0, self.width()//2, self.height(), self.height()//2, self.height()//2)
```
在这个实现中,我们首先设置了QCheckBox的大小和样式,然后在paintEvent()方法中绘制了一个圆角矩形边框和一个翘板。当开关被选中时,翘板的颜色为绿色;否则为红色。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)