界面修改以及显示
This commit is contained in:
@ -1,36 +1,62 @@
|
||||
from PySide6.QtWidgets import QPushButton
|
||||
from PySide6.QtGui import QPainter, QColor, QFont, Qt, QBrush
|
||||
|
||||
from PySide6.QtWidgets import QPushButton
|
||||
from PySide6.QtGui import QPainter, QFont, Qt, QPixmap, QColor
|
||||
from PySide6.QtCore import QRectF
|
||||
import resources.resources_rc
|
||||
|
||||
# 用于 开、拱 等功能按钮
|
||||
class CircularButton(QPushButton):
|
||||
"""自定义圆形按钮,处理 hover 颜色变化"""
|
||||
"""自定义圆形按钮"""
|
||||
def __init__(self, text, parent=None):
|
||||
super().__init__(text, parent)
|
||||
self.setFixedSize(40, 40)
|
||||
# self.normal_color = QColor(1, 18, 98) # 正常颜色 (RGB: 1,18,98)
|
||||
self.normal_color = QColor(86, 119, 252)
|
||||
self.hover_color = QColor(24, 253, 255) # hover 颜色 (RGB: 24,253,255)
|
||||
self.current_color = self.normal_color
|
||||
# 设置按钮大小为41x41(与图片尺寸一致)
|
||||
self.setFixedSize(41, 41)
|
||||
|
||||
# 加载背景图片
|
||||
self.normal_pixmap = QPixmap(":/icons/images/圆形按钮背景1.png") # 正常状态图片 需要修改为实际的路径
|
||||
self.hover_pixmap = QPixmap(":/icons/images/圆形按钮背景2.png") # hover状态图片 需要修改为实际的路径
|
||||
|
||||
# 确保图片加载成功(可选:添加错误处理)
|
||||
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)
|
||||
|
||||
# 去除默认样式
|
||||
self.setStyleSheet("background: transparent; border: none;")
|
||||
|
||||
def enterEvent(self, event):
|
||||
self.current_color = self.hover_color
|
||||
self.update()
|
||||
self.is_hover = True
|
||||
self.update() # 触发重绘
|
||||
super().enterEvent(event)
|
||||
|
||||
def leaveEvent(self, event):
|
||||
self.current_color = self.normal_color
|
||||
self.update()
|
||||
self.is_hover = False
|
||||
self.update() # 触发重绘
|
||||
super().leaveEvent(event)
|
||||
|
||||
def paintEvent(self, event):
|
||||
painter = QPainter(self)
|
||||
painter.setRenderHint(QPainter.Antialiasing)
|
||||
# 绘制圆形背景
|
||||
painter.setBrush(QBrush(self.current_color))
|
||||
painter.setPen(Qt.NoPen)
|
||||
painter.drawEllipse(0, 0, self.width(), self.height())
|
||||
# 绘制白色文字
|
||||
painter.setPen(Qt.white)
|
||||
painter.setFont(QFont("Arial", 10, QFont.Bold))
|
||||
painter.drawText(self.rect(), Qt.AlignCenter, self.text())
|
||||
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())
|
||||
Reference in New Issue
Block a user