#!/usr/bin/env python # -*- encoding: utf-8 -*- ''' @文件 :switch_button.py @时间 :2022/01/22 10:05:50 @作者 :None @版本 :1.0 @说明 :连接开关 ''' from utils.qt import QWidget, Signal, Qt, QRect, QPainter, QFont, QColor, QBrush, QPen from utils.globalvar import SD class SwitchButton(QWidget): """自定义Switch按钮""" # 信号 checkedChanged = Signal(bool) def __init__(self, parent=None): super(SwitchButton, self).__init__(parent) # 设置无边框和背景透明 self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground) self.resize(70, 30) self.state = False # 按钮状态:True表示开,False表示关 def mousePressEvent(self, event): """鼠标点击事件:用于切换按钮状态""" super(SwitchButton, self).mousePressEvent(event) # self.state = False if self.state else True self.state = not self.state # 发射信号 self.checkedChanged.emit(self.state) self.update() def paintEvent(self, event): """绘制按钮""" super(SwitchButton, self).paintEvent(event) # 创建绘制器并设置抗锯齿和图片流畅转换 painter = QPainter(self) painter.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform) # 定义字体样式 font = QFont('Microsoft YaHei') font.setPixelSize(14) painter.setFont(font) # 开关为开的状态 if self.state: painter.setPen(Qt.NoPen) brush = QBrush(QColor('#999999')) painter.setBrush(brush) painter.drawRoundedRect(0, 0, self.width(), self.height(), self.height() // 2, self.height() // 2) painter.setPen(Qt.NoPen) brush.setColor(QColor('#006400')) painter.setBrush(brush) painter.drawRoundedRect(43, 3, 24, 24, 12, 12) # 开关为关的状态 else: painter.setPen(Qt.NoPen) brush = QBrush(QColor('#999999')) painter.setBrush(brush) painter.drawRoundedRect(0, 0, self.width(), self.height(), self.height() // 2, self.height() // 2) painter.setPen(Qt.NoPen) brush.setColor(QColor('#006400')) painter.setBrush(brush) painter.drawRoundedRect(3, 3, 24, 24, 12, 12)