Skip to content

Commit 7aba756

Browse files
committed
refactor buttons layout
1 parent 9c0cfee commit 7aba756

4 files changed

Lines changed: 138 additions & 154 deletions

File tree

app/views/calculator/buttons.py

Lines changed: 0 additions & 154 deletions
This file was deleted.

app/views/layouts/button_layout.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
from PySide6.QtWidgets import QGridLayout
2+
from typing import List
3+
from numexpr import evaluate
4+
from utils.display_utils import DisplayUtils
5+
from views.widgets.button_widget import ButtonWidget
6+
from views.widgets.icon_button_widget import IconButtonWidget
7+
8+
class ButtonLayout(QGridLayout):
9+
def __init__(self, displayUtils: DisplayUtils):
10+
super().__init__()
11+
12+
self.setContentsMargins(0,0,0,0)
13+
self.setSpacing(0)
14+
15+
self.displayUtils = displayUtils
16+
buttons = self._init_buttons()
17+
positions = [
18+
[1,1],
19+
[1,2],
20+
[1,3],
21+
[2,1],
22+
[2,2],
23+
[2,3],
24+
[3,1],
25+
[3,2],
26+
[3,3],
27+
[4,2],
28+
[2,4],
29+
[1,4],
30+
[0,2],
31+
[0,3],
32+
[0,1],
33+
[4,3],
34+
[0,4],
35+
[3,4],
36+
[4,1]
37+
]
38+
39+
for i in range(len(buttons)):
40+
if i == 17:
41+
self.addWidget(buttons[i], positions[i][0], positions[i][1], 2, 1)
42+
else:
43+
self.addWidget(buttons[i], positions[i][0], positions[i][1])
44+
45+
def _init_buttons(self) -> List[ButtonWidget]:
46+
self.button1 = ButtonWidget("1")
47+
self.button2 = ButtonWidget("2")
48+
self.button3 = ButtonWidget("3")
49+
self.button4 = ButtonWidget("4")
50+
self.button5 = ButtonWidget("5")
51+
self.button6 = ButtonWidget("6")
52+
self.button7 = ButtonWidget("7")
53+
self.button8 = ButtonWidget("8")
54+
self.button9 = ButtonWidget("9")
55+
self.button0 = ButtonWidget("0")
56+
57+
self.buttonplus = ButtonWidget("+")
58+
self.buttonminus = ButtonWidget("-")
59+
self.buttontimes = ButtonWidget("x")
60+
self.buttondivide = ButtonWidget("/")
61+
self.buttonpercentage = ButtonWidget("%")
62+
self.buttondot = ButtonWidget(".")
63+
64+
self.buttonbackspace = IconButtonWidget(":/icons/backspace")
65+
self.buttonequals = ButtonWidget("=")
66+
self.buttonac = ButtonWidget("AC")
67+
68+
self.button1.clicked.connect(lambda: self.displayUtils.insert(self.button1.text()))
69+
self.button2.clicked.connect(lambda: self.displayUtils.insert(self.button2.text()))
70+
self.button3.clicked.connect(lambda: self.displayUtils.insert(self.button3.text()))
71+
self.button4.clicked.connect(lambda: self.displayUtils.insert(self.button4.text()))
72+
self.button5.clicked.connect(lambda: self.displayUtils.insert(self.button5.text()))
73+
self.button6.clicked.connect(lambda: self.displayUtils.insert(self.button6.text()))
74+
self.button7.clicked.connect(lambda: self.displayUtils.insert(self.button7.text()))
75+
self.button8.clicked.connect(lambda: self.displayUtils.insert(self.button8.text()))
76+
self.button9.clicked.connect(lambda: self.displayUtils.insert(self.button9.text()))
77+
self.button0.clicked.connect(lambda: self.displayUtils.insert(self.button0.text()))
78+
79+
self.buttonplus.clicked.connect(lambda: self.displayUtils.insert(self.buttonplus.text()))
80+
self.buttonminus.clicked.connect(lambda: self.displayUtils.insert(self.buttonminus.text()))
81+
self.buttontimes.clicked.connect(lambda: self.displayUtils.insert(self.buttontimes.text()))
82+
self.buttondivide.clicked.connect(lambda: self.displayUtils.insert(self.buttondivide.text()))
83+
self.buttonpercentage.clicked.connect(lambda: self.displayUtils.insert(self.buttonpercentage.text()))
84+
self.buttondot.clicked.connect(lambda: self.displayUtils.insert(self.buttondot.text()))
85+
86+
self.buttonac.clicked.connect(lambda: self.displayUtils.clear())
87+
self.buttonbackspace.clicked.connect(lambda: self.displayUtils.delete())
88+
self.buttonequals.clicked.connect(lambda: self.displayUtils.calculate())
89+
90+
return [
91+
self.button1,
92+
self.button2,
93+
self.button3,
94+
self.button4,
95+
self.button5,
96+
self.button6,
97+
self.button7,
98+
self.button8,
99+
self.button9,
100+
self.button0,
101+
self.buttonplus,
102+
self.buttonminus,
103+
self.buttontimes,
104+
self.buttondivide,
105+
self.buttonpercentage,
106+
self.buttondot,
107+
self.buttonbackspace,
108+
self.buttonequals,
109+
self.buttonac
110+
]

app/views/widgets/button_widget.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from PySide6.QtGui import QFont
2+
from PySide6.QtWidgets import QSizePolicy
3+
from PySide6.QtCore import Qt
4+
from qfluentwidgets.components.widgets.button import TransparentPushButton
5+
6+
class ButtonWidget(TransparentPushButton):
7+
def __init__(self, value: str):
8+
super().__init__()
9+
10+
font = QFont("OpenSans")
11+
font.setPointSizeF(10)
12+
13+
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
14+
self.setCursor(Qt.CursorShape.PointingHandCursor)
15+
self.setFont(font)
16+
self.setText(value)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from PySide6.QtWidgets import QSizePolicy
2+
from PySide6.QtCore import Qt
3+
from PySide6.QtGui import QIcon
4+
from qfluentwidgets.components.widgets.button import TransparentToolButton
5+
6+
class IconButtonWidget(TransparentToolButton):
7+
def __init__(self, icon_path: str):
8+
super().__init__()
9+
10+
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
11+
self.setCursor(Qt.CursorShape.PointingHandCursor)
12+
self.setIcon(QIcon(icon_path))

0 commit comments

Comments
 (0)