SudokuGame/graphic_components/menu_graphics.py

110 lines
3.6 KiB
Python

from PyQt5.QtGui import QPainter, QBrush, QPen, QColor, QFont
from PyQt5.QtWidgets import (QSizePolicy, QGraphicsWidget, QGraphicsItem,
QGraphicsLineItem, QGraphicsRectItem, QGraphicsObject,
QGraphicsItemGroup, QGraphicsLayoutItem)
from PyQt5.QtCore import (QAbstractAnimation, QObject, QPointF, Qt, QRectF, QLineF,
QPropertyAnimation, pyqtProperty, pyqtSignal, QSizeF)
from . import buttons
class TimerDisplayer(QGraphicsWidget):
def __init__(self, parent=None):
super().__init__()
self.setParent(parent)
self.width = 100
self.height = 50
self.box_pen = QPen()
self.box_pen.setColor(Qt.white)
self.pen_width = 3
self.box_pen.setWidth(self.pen_width)
self.timer_box = QRectF(0, 0, self.width, self.height)
self.setMinimumSize(QSizeF(self.width, self.height))
self.setMaximumSize(QSizeF(self.width, self.height))
self.size_policy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
self.size_policy.setHeightForWidth(True)
self.setSizePolicy(self.size_policy)
def paint(self, painter, style, widget=None):
box = self.timer_box
#print(self.size().width())
painter.setPen(self.box_pen)
painter.drawRect(box)
painter.drawText(box, Qt.AlignCenter, "00:00")
class DifficultyDisplayer(QGraphicsWidget):
notFocus = pyqtSignal()
def __init__(self, parent=None):
super().__init__()
self.setParent(parent)
self.width = 100
self.height = 50
self.box_pen = QPen()
self.box_pen.setColor(Qt.white)
self.pen_width = 3
self.box_pen.setWidth(self.pen_width)
self.diff_box = QRectF(0, 0, self.width, self.height)
self.diff_buttons = []
self.difficulty = ['Easy', 'Normal', 'Hard', 'Insane']
for i in range(4):
btn = buttons.animBox(0, -(self.height + 10) * (i + 1),
self.width, self.height, self.difficulty[i], parent=self)
btn.setVisible(False)
self.diff_buttons.append(btn)
self.setMinimumSize(QSizeF(self.width, self.height))
self.setMaximumSize(QSizeF(self.width, self.height))
self.size_policy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
self.size_policy.setHeightForWidth(True)
self.setSizePolicy(self.size_policy)
self.selected = False
self.focus_changed = False
self.setFlag(QGraphicsItem.ItemIsFocusable, True)
def paint(self, painter, style, widget=None):
painter.setPen(self.box_pen)
painter.drawRect(self.diff_box)
painter.drawText(self.diff_box, Qt.AlignCenter, "Normal")
#painter.drawRect(self.boundingRect())
def mousePressEvent(self, event):
#if not self.focus_changed:
print('Click')
self.selected = not self.selected
for btn in self.diff_buttons:
btn.setVisible(self.selected)
self.update()
if self.selected:
self.setFocus()
else:
print('Out of focus')
# self.focus_changed = False
def boundingRect(self):
if self.selected:
return QRectF(-10, -(self.height+10)*4 -10, self.width+20, (self.height+10) * 4+5)
else:
return super().boundingRect()
def focusOutEvent(self, event):
print("diff focus out")
self.selected = False
self.focus_changed = True
for btn in self.diff_buttons:
btn.setVisible(False)
self.notFocus.emit()