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+ ]
0 commit comments