122 lines
4.5 KiB
Python
122 lines
4.5 KiB
Python
import datetime
|
||
import json
|
||
import os
|
||
import requests
|
||
import PySimpleGUI as Sgi
|
||
|
||
from calculating import calculating, amortization, cost_prise
|
||
from setts import window_setts, mk_dir_json
|
||
from text_ru import calc, about, not_connect, new_marge, ver
|
||
from update import upd_start, upd_check
|
||
|
||
now = datetime.datetime.now()
|
||
|
||
|
||
def create_window():
|
||
with open(os.path.expanduser('~\Documents\Calc3DbyRisen\setts.json')) as file:
|
||
theme = json.load(file)['settings']['theme']
|
||
Sgi.theme(theme)
|
||
menu_def = [
|
||
['File', ['Настройки'], ['Выход']],
|
||
['Help', ['Как рассчитывается стоимость', 'Обо мне', 'Проверить обновления']],
|
||
]
|
||
|
||
layout = [
|
||
[Sgi.Menu(menu_def)],
|
||
[Sgi.Txt('_' * 46)],
|
||
[Sgi.Text('0', size=(7, 1), font=('Consolas', 32),
|
||
text_color='white', key='result', auto_size_text=True, justification='right', expand_x=True),
|
||
Sgi.Text('руб.', font=('Consolas', 32), text_color='white', key='result')],
|
||
[Sgi.Text('Себестоимость:', font=12, text_color='white'),
|
||
Sgi.Text('0', size=(7, 1), font=12, text_color='white', key='cost', auto_size_text=True,
|
||
justification='right', expand_x=True),
|
||
Sgi.Text('руб.', font=('Consolas', 12), text_color='white', key='cost')],
|
||
[Sgi.Txt('_' * 46, pad=(10, 5))],
|
||
[Sgi.Text('Время печати'), Sgi.Push(), Sgi.InputText('0', size=(5, 20)), Sgi.Text('ч.'),
|
||
Sgi.InputText('0', size=(5, 0)), Sgi.Text('мин. ')],
|
||
[Sgi.Text('Вес детали'), Sgi.Push(), Sgi.InputText('0', size=(10, 20), justification='right', ),
|
||
Sgi.Text('гр. ')],
|
||
[Sgi.Text('Количество экземпляров'), Sgi.Push(), Sgi.InputText('1', size=(10, 20), justification='right', ),
|
||
Sgi.Text('шт. ')],
|
||
[Sgi.Txt('_' * 46)],
|
||
[Sgi.Text('Моделирование'), Sgi.Push(), Sgi.InputText('0', size=(10, 20), justification='right', ),
|
||
Sgi.Text('руб. ')],
|
||
[Sgi.Text('Постобработка'), Sgi.Push(), Sgi.InputText('0', size=(10, 20), justification='right', ),
|
||
Sgi.Text('руб. ')],
|
||
[Sgi.Txt('_' * 46)],
|
||
[Sgi.Txt(' ' * 15), Sgi.ReadFormButton('Расчитать', size=(10, 2)), Sgi.Cancel('Выход', size=(10, 2))]
|
||
|
||
]
|
||
return Sgi.Window(f'Calc3D by Risen ver.{ver}', layout, icon='logo.ico')
|
||
|
||
|
||
def main():
|
||
mk_dir_json()
|
||
window = create_window()
|
||
try:
|
||
upd_start()
|
||
except requests.exceptions.ConnectionError:
|
||
Sgi.popup_ok(not_connect)
|
||
|
||
while True:
|
||
event, values = window.read()
|
||
|
||
if event == "Настройки":
|
||
window_setts()
|
||
window.close()
|
||
window = create_window()
|
||
|
||
elif event == "Как рассчитывается стоимость":
|
||
Sgi.popup_ok(calc)
|
||
|
||
elif event == "Обо мне":
|
||
Sgi.popup(about)
|
||
|
||
elif event == "Проверить обновления":
|
||
try:
|
||
upd_check()
|
||
except requests.exceptions.ConnectionError:
|
||
Sgi.popup_ok(not_connect)
|
||
|
||
elif event == 'Расчитать':
|
||
with open(os.path.expanduser('~\Documents\Calc3DbyRisen\setts.json')) as file:
|
||
params = json.load(file)["settings"]
|
||
try:
|
||
hours = float(values[1])
|
||
except ValueError:
|
||
hours = 0
|
||
try:
|
||
minutes = float(values[2])
|
||
except ValueError:
|
||
minutes = 0
|
||
|
||
if minutes > 60:
|
||
hours = hours + minutes // 60
|
||
minutes = minutes % 60
|
||
t = hours * 60 + minutes
|
||
|
||
try:
|
||
md = values[3]
|
||
except ValueError:
|
||
md = 0
|
||
|
||
am = amortization(params['a'], t, params['spi'], now.year) # a, t, spi, year
|
||
|
||
cost = cost_prise(params['p'], t, params['h'], md, params['d'], params['st'], params['mk'], am,
|
||
values[6], values[4]) # p, t, h, md, d, st, mk, am, post, x
|
||
|
||
try:
|
||
result = calculating(cost, values[5], params['marge']) # cost, mod, marg
|
||
except KeyError:
|
||
Sgi.popup_ok(new_marge)
|
||
result = 0
|
||
window.find_element('result').Update(result)
|
||
window.find_element('cost').Update(cost)
|
||
|
||
elif event in (Sgi.WIN_CLOSED, 'Выход'):
|
||
break
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|