Как плавно изменить цвет фона при наведении мыши?
Мой код
import sys
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
QRect, QSize, QUrl, Qt)
from PyQt5.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
QRadialGradient)
from PyQt5.QtWidgets import *
class RadioButton(QRadioButton):
def __init__(self, parent=None):
super(RadioButton, self).__init__(parent)
self.toggled.connect(self.change_text)
self.setObjectName(u"rb0")
self.setText('W')
self.step = 0
def change_text(self):
if self.isChecked():
self.setText('C')
else:
self.setText('W')
def enterEvent(self,event):
while self.step < 255:
self.step += 1
print(self.step)
self.setStyleSheet("QRadioButton{"+"background-color:rgb(255, {}, 0)".format(self.step)+";}QRadioButton::indicator {width:1 ;height:1; background:rgba(255, 255, 255, 0); }")
def leaveEvent(self,event):
while self.step > 0:
self.step -= 1
print(self.step)
self.setStyleSheet("QRadioButton{"+"background-color:rgb(255, {}, 0)".format(self.step)+";}QRadioButton::indicator {width:1 ;height:1; background:rgba(255, 255, 255, 0); }")
def sizeHint(self):
return QtCore.QSize(30, 30)
class Window(QWidget):
def __init__(self):
super().__init__()
self._dictRB = {
'rb0': False,
'rb1': False,
'rb2': False,
'rb3': False,
}
self.main_layout = QWidget(self)
self.main_layout.setMinimumSize(QSize(300, 300))
self.buttonGroup = QButtonGroup()
self.attr_layout = QHBoxLayout(self.main_layout)
self.rb0 = RadioButton() #QRadioButton() # 'rb0'
self.rb0.setStyleSheet('QRadioButton{background: red} QRadioButton::indicator {width:1 ;height:1; background:rgba(255, 255, 255, 0); }')
self.attr_layout.addWidget(self.rb0)
self.buttonGroup.addButton(self.rb0)
sizePolicy0 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
sizePolicy0.setHorizontalStretch(0)
sizePolicy0.setVerticalStretch(0)
sizePolicy0.setHeightForWidth(self.rb0.sizePolicy().hasHeightForWidth())
self.rb0.setSizePolicy(sizePolicy0)
self.rb1 = QRadioButton('rb1')
self.rb1.setObjectName(u"rb1")
sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
sizePolicy1.setHorizontalStretch(0)
sizePolicy1.setVerticalStretch(0)
sizePolicy1.setHeightForWidth(self.rb1.sizePolicy().hasHeightForWidth())
self.rb1.setSizePolicy(sizePolicy1)
self.attr_layout.addWidget(self.rb1)
self.buttonGroup.addButton(self.rb1)
self.rb2 = QRadioButton('rb2')
self.rb2.setObjectName(u"rb2")
self.attr_layout.addWidget(self.rb2)
self.buttonGroup.addButton(self.rb2)
sizePolicy2 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
sizePolicy2.setHorizontalStretch(0)
sizePolicy2.setVerticalStretch(0)
sizePolicy2.setHeightForWidth(self.rb2.sizePolicy().hasHeightForWidth())
self.rb2.setSizePolicy(sizePolicy2)
self.rb3 = QRadioButton('rb3')
self.rb3.setObjectName(u"rb3")
self.buttonGroup.addButton(self.rb3)
sizePolicy3 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
sizePolicy3.setHorizontalStretch(0)
sizePolicy3.setVerticalStretch(0)
sizePolicy3.setHeightForWidth(self.rb3.sizePolicy().hasHeightForWidth())
self.rb3.setSizePolicy(sizePolicy3)
self.buttonGroup.buttonClicked.connect(self.check_button)
def check_button(self, radioButton):
if self._dictRB[radioButton.objectName()]:
self._dictRB[radioButton.objectName()] = False
self._dictRB['rb3'] = True
self.rb3.setChecked(True)
else:
for b in self._dictRB:
self._dictRB[b] = False
self._dictRB[radioButton.objectName()] = True
print("Нажата кнопка -> `{} - {}`".format(radioButton.objectName(), radioButton.isChecked()))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
Мне нужно плавно менять цвет при наведении
Я пытался это сделать используя enterEvent и leaveEvent Но они регистрируют действие только когда мышка находится и покидает область. Есть ли инструменты в qt позволяющие менять плавно цвет при наведении мыши И не переписывать постоянно setStyleSheet?
