Make number ring transparent

master
En Yi 2018-07-21 19:21:34 +08:00
parent 3aedc13608
commit 912eafc564
2 changed files with 35 additions and 2 deletions

View File

@ -7,7 +7,7 @@ import random
from PyQt5.QtCore import (QAbstractAnimation, Qt, QRectF, QLineF, from PyQt5.QtCore import (QAbstractAnimation, Qt, QRectF, QLineF,
QPropertyAnimation, pyqtProperty, pyqtSignal) QPropertyAnimation, pyqtProperty, pyqtSignal)
from PyQt5.QtGui import QPen from PyQt5.QtGui import QPen, QColor
from PyQt5.QtWidgets import (QGraphicsObject) from PyQt5.QtWidgets import (QGraphicsObject)
from general import extras from general import extras
@ -61,6 +61,18 @@ class AnimBox(QGraphicsObject):
self.anim.setKeyValueAt(t / 10, self.logistic_func(t / 10)) self.anim.setKeyValueAt(t / 10, self.logistic_func(t / 10))
self.anim.setEndValue(self.circumference) self.anim.setEndValue(self.circumference)
self.animText = AnimatedText(self.text, parent=self) self.animText = AnimatedText(self.text, parent=self)
self.transparent = False
def set_transparent(self, state):
self.transparent = state
col = self.default_pen.color()
if state:
col.setAlphaF(0.2)
else:
col.setAlphaF(1)
self.default_pen.setColor(col)
self.animText.set_transparent(state)
self.update()
def set_freeze(self, freeze): def set_freeze(self, freeze):
if freeze: if freeze:
@ -94,7 +106,10 @@ class AnimBox(QGraphicsObject):
if line.length() > 1: if line.length() > 1:
painter.drawLine(line) painter.drawLine(line)
painter.setPen(self.default_pen) painter.setPen(self.default_pen)
painter.fillRect(self.btn_rect, Qt.black) if self.transparent:
painter.fillRect(self.btn_rect, QColor(255, 255, 255, 0.1))
else:
painter.fillRect(self.btn_rect, Qt.black)
painter.drawRect(self.btn_rect) painter.drawRect(self.btn_rect)
# Defining the length to be drawn as a pyqtProperty # Defining the length to be drawn as a pyqtProperty
@ -181,6 +196,15 @@ class AnimatedText(QGraphicsObject):
self.anim.setEndValue(len(self.actual_text) + self.delay) self.anim.setEndValue(len(self.actual_text) + self.delay)
self.visibleChanged.connect(self.show_text) self.visibleChanged.connect(self.show_text)
def set_transparent(self, state):
col = self.default_pen.color()
if state:
col.setAlphaF(0.2)
else:
col.setAlphaF(1)
self.default_pen.setColor(col)
self.update()
def show_text(self): def show_text(self):
if self.isVisible(): if self.isVisible():
self.toggle_anim(True) self.toggle_anim(True)

View File

@ -299,6 +299,7 @@ class NumberRing(BaseSudokuItem):
self.anim.finished.connect(self.finish_animation) self.anim.finished.connect(self.finish_animation)
self.setFlag(QGraphicsItem.ItemIsFocusable, True) self.setFlag(QGraphicsItem.ItemIsFocusable, True)
self.setAcceptHoverEvents(True)
self.freeze_buttons(True) self.freeze_buttons(True)
self.scribbling = False self.scribbling = False
@ -374,6 +375,14 @@ class NumberRing(BaseSudokuItem):
if event.key() == SCRIBBLE_KEY and self.scribbling: if event.key() == SCRIBBLE_KEY and self.scribbling:
self.scribbling = False self.scribbling = False
def hoverEnterEvent(self, event):
for btn in self.cell_buttons:
btn.set_transparent(False)
def hoverLeaveEvent(self, event):
for btn in self.cell_buttons:
btn.set_transparent(True)
# Defining the length to be drawn as a pyqtProperty # Defining the length to be drawn as a pyqtProperty
@pyqtProperty(float) @pyqtProperty(float)
def radius(self): def radius(self):