Files
Feeding_control_system/view/widgets/circular_button.py

66 lines
2.6 KiB
Python
Raw Permalink Normal View History

2025-10-31 18:52:31 +08:00
from PySide6.QtWidgets import QPushButton
from PySide6.QtGui import QPainter, QFont, Qt, QPixmap, QColor
from PySide6.QtCore import QRectF
import resources.resources_rc
2025-11-01 16:13:14 +08:00
from utils.image_paths import ImagePaths
2025-10-18 18:29:40 +08:00
2025-10-31 18:52:31 +08:00
# 用于 开、拱 等功能按钮
2025-10-18 18:29:40 +08:00
class CircularButton(QPushButton):
2025-10-31 18:52:31 +08:00
"""自定义圆形按钮"""
2025-10-18 18:29:40 +08:00
def __init__(self, text, parent=None):
super().__init__(text, parent)
2025-10-31 18:52:31 +08:00
# 设置按钮大小为41x41与图片尺寸一致
self.setFixedSize(41, 41)
# 加载背景图片
2025-11-01 16:13:14 +08:00
self.normal_pixmap = QPixmap(ImagePaths.ROUND_BTN_BG1) # 正常状态图片 需要修改为实际的路径
self.hover_pixmap = QPixmap(ImagePaths.ROUND_BTN_BG2) # hover状态图片 需要修改为实际的路径
2025-10-31 18:52:31 +08:00
# 确保图片加载成功(可选:添加错误处理)
if self.normal_pixmap.isNull():
print("警告圆形按钮背景1.png 加载失败")
if self.hover_pixmap.isNull():
print("警告圆形按钮背景2.png 加载失败")
# 字体初始化状态和颜色
self.is_hover = False
self.normal_text_color = QColor(6, 224, 239)
self.hover_text_color = QColor(3, 20, 100)
2025-11-01 16:13:14 +08:00
# 设置按钮手势
self.setCursor(Qt.PointingHandCursor)
2025-10-31 18:52:31 +08:00
# 去除默认样式
2025-10-18 18:29:40 +08:00
self.setStyleSheet("background: transparent; border: none;")
def enterEvent(self, event):
2025-10-31 18:52:31 +08:00
self.is_hover = True
self.update() # 触发重绘
2025-10-18 18:29:40 +08:00
super().enterEvent(event)
def leaveEvent(self, event):
2025-10-31 18:52:31 +08:00
self.is_hover = False
self.update() # 触发重绘
2025-10-18 18:29:40 +08:00
super().leaveEvent(event)
def paintEvent(self, event):
painter = QPainter(self)
2025-10-31 18:52:31 +08:00
painter.setRenderHint(QPainter.RenderHint.Antialiasing) # 抗锯齿
# 绘制对应状态的背景图片
current_pixmap = self.hover_pixmap if self.is_hover else self.normal_pixmap
if not current_pixmap.isNull():
# 绘制图片并适应按钮大小(保持圆形)
painter.drawPixmap(self.rect(), current_pixmap)
# 绘制文字
# painter.setPen(self.hover_text_color if self.is_hover else self.normal_text_color)
# print("self.is_hover: ", self.is_hover)
if self.is_hover: # 根据鼠标是否解除修改字体颜色
painter.setPen(self.hover_text_color)
else:
painter.setPen( self.normal_text_color)
painter.setFont(QFont("Arial", 12, QFont.Weight.Bold))
# 在按钮中心绘制文字
painter.drawText(self.rect(), Qt.AlignmentFlag.AlignCenter, self.text())