-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdisplay.py
70 lines (57 loc) · 2.11 KB
/
display.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from constants import BIG_FONT_SIZE, MINIMUM_WIDTH, TEXT_MARGIN
from PySide6.QtCore import Qt, Signal
from PySide6.QtGui import QKeyEvent
from PySide6.QtWidgets import QLineEdit
from utils import isEmpty, isNumOrDot
class Display(QLineEdit):
eqPressed = Signal()
delPressed = Signal()
clearPressed = Signal()
inputPressed = Signal(str)
operatorPressed = Signal(str)
inversePressed = Signal()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.configStyle()
def configStyle(self):
margins = [TEXT_MARGIN for _ in range(4)]
self.setStyleSheet(f'font-size: {BIG_FONT_SIZE}px')
self.setMinimumHeight(BIG_FONT_SIZE * 2)
self.setMinimumWidth(MINIMUM_WIDTH)
self.setAlignment(Qt.AlignmentFlag.AlignRight)
self.setTextMargins(*margins)
def keyPressEvent(self, event: QKeyEvent) -> None:
text = event.text().strip()
key = event.key()
KEYS = Qt.Key
isEnter = key in [KEYS.Key_Return, KEYS.Key_Enter, KEYS.Key_Equal]
isDelete = key in [KEYS.Key_Backspace, KEYS.Key_Delete, KEYS.Key_D]
isEsc = key in [KEYS.Key_Escape, KEYS.Key_C]
isOperator = key in [
KEYS.Key_Plus, KEYS.Key_Minus, KEYS.Key_Slash, KEYS.Key_Asterisk,
KEYS.Key_P, KEYS.Key_Exclam, KEYS.Key_Percent
]
isInverse = key in [KEYS.Key_N]
if isEnter:
self.eqPressed.emit()
return event.ignore()
if isDelete:
self.delPressed.emit()
return event.ignore()
if isEsc:
self.clearPressed.emit()
return event.ignore()
if isInverse:
self.inversePressed.emit()
return event.ignore()
if isOperator:
if text.lower() == 'p':
text = '^'
self.operatorPressed.emit(text)
return event.ignore()
# Não passar daqui se não tiver texto
if isEmpty(text):
return event.ignore()
if isNumOrDot(text):
self.inputPressed.emit(text)
return event.ignore()