Skip to content

Commit 25b174a

Browse files
committed
refactor display layout
1 parent 8899f24 commit 25b174a

4 files changed

Lines changed: 72 additions & 14 deletions

File tree

app/utils/display_utils.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from re import match, split
2+
from numexpr import evaluate
3+
from views.layouts.display_layout import DisplayLayout
4+
5+
class DisplayUtils():
6+
def __init__(self, displayLayout: DisplayLayout):
7+
super().__init__()
8+
9+
self.equationDisplay = displayLayout.equationDisplay
10+
self.resultDisplay = displayLayout.resultDisplay
11+
12+
def insert(self, value: str):
13+
if value == ".":
14+
if "." not in split(r"\+|-|x|/|%", self.resultDisplay.text())[-1]:
15+
text = self.resultDisplay.text()
16+
self.resultDisplay.setText(text + value)
17+
elif bool(match(r"\+|-|x|/|%", value)):
18+
if not bool(match(r"\+|-|x|/|%|\.", self.resultDisplay.text()[-1])):
19+
text = self.resultDisplay.text()
20+
self.resultDisplay.setText(text + value)
21+
else:
22+
text = self.resultDisplay.text()
23+
self.resultDisplay.setText(text + value)
24+
25+
def delete(self):
26+
self.resultDisplay.setText(self.resultDisplay.text()[:-1])
27+
28+
def clear(self):
29+
self.equationDisplay.setText("")
30+
self.resultDisplay.setText("")
31+
32+
def calculate(self):
33+
if not bool(match(r"\+|-|x|/|%|\.", self.resultDisplay.text()[-1])):
34+
equation = self.resultDisplay.text().replace("x", "*")
35+
result = int(evaluate(equation).item()) if float(evaluate(equation).item()).is_integer() else float(evaluate(equation).item())
36+
37+
self.equationDisplay.setText(self.resultDisplay.text())
38+
self.resultDisplay.setText(str(result))

app/views/calculator/display.py

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from PySide6.QtWidgets import QVBoxLayout
2+
from PySide6.QtCore import Qt
3+
from views.widgets.display_widget import DisplayWidget
4+
5+
class DisplayLayout(QVBoxLayout):
6+
def __init__(self):
7+
super().__init__()
8+
9+
equationDisplay = DisplayWidget(10, Qt.AlignmentFlag.AlignVCenter)
10+
resultDisplay = DisplayWidget(15, Qt.AlignmentFlag.AlignTop)
11+
12+
equationDisplay.setText("Equation")
13+
resultDisplay.setText("Result")
14+
15+
self.addWidget(equationDisplay)
16+
self.addWidget(resultDisplay)
17+
18+
self.setSpacing(0)
19+
self.setContentsMargins(5,0,5,0)
20+
21+
self.equationDisplay = equationDisplay
22+
self.resultDisplay = resultDisplay
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from PySide6.QtGui import QFont
2+
from PySide6.QtCore import Qt
3+
from qfluentwidgets.components.widgets.label import DisplayLabel
4+
5+
class DisplayWidget(DisplayLabel):
6+
def __init__(self, fontSize: float, verticalAlign: Qt.AlignmentFlag):
7+
super().__init__()
8+
9+
font = QFont("OpenSans")
10+
font.setPointSizeF(fontSize)
11+
self.setAlignment(verticalAlign | Qt.AlignmentFlag.AlignRight)
12+
self.setFont(font)

0 commit comments

Comments
 (0)