Initial commit

master
error042 3 years ago
commit fa17d657e4
  1. 8
      .idea/.gitignore
  2. 10
      .idea/MvcTaschenrechner.iml
  3. 6
      .idea/inspectionProfiles/profiles_settings.xml
  4. 4
      .idea/misc.xml
  5. 8
      .idea/modules.xml
  6. 21
      controller.py
  7. 54
      model.py
  8. 69
      view.py

8
.idea/.gitignore vendored

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (MvcTaschenrechner) (2)" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/MvcTaschenrechner.iml" filepath="$PROJECT_DIR$/.idea/MvcTaschenrechner.iml" />
</modules>
</component>
</project>

@ -0,0 +1,21 @@
from model import Model
from view import View
class Controller:
def __init__(self):
self.model = Model()
self.view = View(self)
def main(self):
self.view.main()
def on_button_click(self, caption):
result = self.model.calculate(caption)
self.view.value_var.set(result)
if __name__ == '__main__':
calculator = Controller()
calculator.main()

@ -0,0 +1,54 @@
'''
Created on Jun 03, 2022
@author: error042
'''
class Model:
'''
classdocs
'''
def __init__(self):
'''
Constructor
'''
self.previous_value = ''
self.value = ''
self.operator = ''
def calculate(self, caption):
if caption == 'C':
self.value = ''
elif caption == '+/-':
self.value = self.value[1:] if self.value[0] == '-' else '-' + self.value
elif caption == '.':
if not caption in self.value:
self.value += caption
elif self.value[-1] == caption:
self.value = self.value[:-1]
elif caption == '%':
self.operator = '/'
self.previous_value = self.value
self.value = '100'
self.value = str(self._evaluate())
elif caption == '=':
self.value = str(self._evaluate())
elif isinstance(caption, int):
self.value += str(caption)
else:
if self.value:
self.operator = caption
self.previous_value = self.value
self.value = ''
return self.value
def _evaluate(self):
return eval(self.previous_value+self.operator+self.value)

@ -0,0 +1,69 @@
'''
Created on Jun 03, 2022
@author: error042
'''
import tkinter as tk
from tkinter import ttk
class View(tk.Tk):
'''
classdocs
'''
PAD = 10
MAX_BUTTONS_PER_ROW = 4
button_captions = [
'C', '+/-', '%', '/',
7, 8, 9, '*',
4, 5, 6, '-',
1, 2, 3, '+',
0, '.', '='
]
def __init__(self, controller):
'''
Constructor
'''
super().__init__()
self.title('PyCalc')
self.controller = controller
self.value_var = tk.StringVar()
self._make_main_frame()
self._make_entry()
self._make_buttons()
def main(self):
self.mainloop()
def _make_main_frame(self):
self.main_frm = ttk.Frame(self)
self.main_frm.pack(padx=self.PAD, pady=self.PAD)
def _make_entry(self):
ent = ttk.Entry(self.main_frm, justify='right', textvariable=self.value_var, state='readonly')
ent.pack(fill='x')
def _make_buttons(self):
outer_frm = ttk.Frame(self.main_frm)
outer_frm.pack()
frm = ttk.Frame(outer_frm)
frm.pack()
for buttons_in_row, caption in enumerate(self.button_captions):
if buttons_in_row % self.MAX_BUTTONS_PER_ROW == 0:
frm = ttk.Frame(outer_frm)
frm.pack()
btn = ttk.Button(
frm, text=caption, command=(
lambda button=caption: self.controller.on_button_click(button)
)
)
btn.pack(side='left')
Loading…
Cancel
Save