add:READMY.md
This commit is contained in:
parent
bc7610b568
commit
cf79a7c838
98
README.md
98
README.md
@ -0,0 +1,98 @@
|
||||
# Calc3D by Risen
|
||||
Калькулятор Calc3D by Risen предназначен для быстрой оценки стоимости печати на 3D принтере,
|
||||
исходя из стоимости пластика, веса, тарифа электроэнергии и прочего...
|
||||
|
||||
## Содержание
|
||||
- [Формула расчета](#формула-расчета)
|
||||
- [Как скачать](#как-скачать)
|
||||
- [FAQ](#faq)
|
||||
- [Зачем это всё](#почему-я-решил-реализовать-этот-проект?)
|
||||
- [Команда проекта](#команда-проекта)
|
||||
- [Лицензия](#лицензия)
|
||||
-
|
||||
## Формула расчета
|
||||
|
||||
```
|
||||
S = ((p/1000*t/60*h)+(md*d*st/mk)+(a+post))*x+mod
|
||||
```
|
||||
где
|
||||
```
|
||||
S - стоимость печати, руб.
|
||||
|
||||
p - мощность принтера, Вт
|
||||
|
||||
t - время печати, мин.
|
||||
|
||||
h - тариф на электроэнергию, кВт/ч
|
||||
|
||||
md - вес детали, гр.
|
||||
|
||||
d - множитель отбраковки.
|
||||
|
||||
st - стоимость катушки пластика, руб.
|
||||
|
||||
mk - вес пластика в катушке, гр.
|
||||
|
||||
a - амортизация принтера, руб.
|
||||
|
||||
post - стоимость постобработки, руб.
|
||||
|
||||
х - количество печатаемых дубликатов, шт.
|
||||
|
||||
mod - стоимость моделирования, руб
|
||||
```
|
||||
|
||||
|
||||
## Как скачать
|
||||
Переходим в раздел "Релизы" по это ссылке: [релизы](https://git.risenhome.xyz/risen/Calc3D_by_Risen/releases)
|
||||
|
||||
Качаем последнюю версию, настраиваем свои параметры и пользуемся.
|
||||
|
||||
|
||||
## FAQ
|
||||
Раздел в процессе написания
|
||||
|
||||
## Почему я решил реализовать этот проект?
|
||||
Не нашел в интернете таких калькуляторов офлайн. Решил сделать для себя, заодно потренироваться в программировании.
|
||||
|
||||
|
||||
## Команда проекта
|
||||
Вы можете написать мне в личку в телеграм, если у Вас есть каие-то вопросы по работе калькулятора.
|
||||
|
||||
- [Risen (Colin Robinson)](tg://resolve?domain=RisenYT) — разработчик-любитель
|
||||
|
||||
## Лицензия
|
||||
MIT
|
||||
```
|
||||
Copyright (c) <2024> <Risen>
|
||||
|
||||
Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации
|
||||
(далее — Программное обеспечение), безвозмездно использовать Программное обеспечение без ограничений, включая
|
||||
неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование
|
||||
и/или продажу копий Программного обеспечения, а также лицам, которым предоставляется данное Программное обеспечение,
|
||||
при соблюдении следующих условий:
|
||||
|
||||
Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части
|
||||
данного Программного обеспечения.
|
||||
|
||||
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ,
|
||||
ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ,
|
||||
НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ,
|
||||
ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ,
|
||||
ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
|
||||
```
|
||||
```
|
||||
Copyright (c) <2024> <Risen>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
||||
documentation files (the "Software"), to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
|
||||
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.```
|
174
setts.py
174
setts.py
@ -1,174 +0,0 @@
|
||||
import json
|
||||
import PySimpleGUI as Sgi
|
||||
import gettext
|
||||
import os
|
||||
|
||||
from texts import amortization_calc, new_sets
|
||||
from lists import themes_list, lang_list, currency_list
|
||||
|
||||
|
||||
def language():
|
||||
with open(os.path.expanduser('setts.json')) as file:
|
||||
old_data = json.load(file)
|
||||
if old_data['settings']["locale"] == 'English':
|
||||
locale = 'en_US'
|
||||
else:
|
||||
locale = 'ru_RU'
|
||||
return locale
|
||||
|
||||
|
||||
lang = gettext.translation('locale', localedir='locale', languages=[language()])
|
||||
lang.install()
|
||||
_ = lang.gettext
|
||||
|
||||
|
||||
def currency_setts():
|
||||
with open('setts.json') as file:
|
||||
old_data = json.load(file)
|
||||
try:
|
||||
if old_data['settings']["currency"] == 'руб.':
|
||||
currency = 'руб.'
|
||||
elif old_data['settings']["currency"] == '$':
|
||||
currency = '$'
|
||||
else:
|
||||
currency = '€'
|
||||
|
||||
except KeyError:
|
||||
if old_data['settings']["locale"] == "рус.":
|
||||
currency = 'руб.'
|
||||
else:
|
||||
currency = '$'
|
||||
return currency
|
||||
|
||||
|
||||
def window_setts():
|
||||
with open('setts.json') as file:
|
||||
old_data = json.load(file)
|
||||
theme = old_data["settings"]["theme"]
|
||||
p = old_data["settings"]["p"]
|
||||
h = old_data["settings"]["h"]
|
||||
d = old_data["settings"]["d"]
|
||||
st = old_data["settings"]["st"]
|
||||
mk = old_data["settings"]["mk"]
|
||||
a = old_data["settings"]["a"]
|
||||
locale = old_data['settings']["locale"]
|
||||
try:
|
||||
currency = old_data['settings']["currency"]
|
||||
except KeyError:
|
||||
currency = "руб."
|
||||
try:
|
||||
spi = old_data["settings"]["spi"]
|
||||
except KeyError:
|
||||
Sgi.popup_ok(new_sets)
|
||||
spi = 0
|
||||
try:
|
||||
marg = old_data["settings"]["marge"]
|
||||
except KeyError:
|
||||
marg = 0
|
||||
|
||||
layout1 = [
|
||||
[Sgi.Text(_("ВНИМАНИЕ! Перед установкой параметра\n'Коэффициент выбраковки' прочитайте раздел\n"
|
||||
"Help, с описанием формулы расчета!\n"), text_color="red")],
|
||||
[Sgi.Text(_('Мощность принтера, Вт')), Sgi.Push(), Sgi.InputText(p, size=(10, 10), justification='right')],
|
||||
[Sgi.Text(_('Тариф электроэнергии, кВт/ч')), Sgi.Push(),
|
||||
Sgi.InputText(h, size=(10, 10), justification='right')],
|
||||
[Sgi.Text(_('Коэффициент выбраковки')), Sgi.Push(), Sgi.InputText(d, size=(10, 10), justification='right')],
|
||||
[Sgi.Text(_('Стоимость катушки, ')+f'{currency_setts()}'), Sgi.Push(),
|
||||
Sgi.InputText(st, size=(10, 10), justification='right')],
|
||||
[Sgi.Text(_('Вес катушки, гр.')), Sgi.Push(),
|
||||
Sgi.Combo(['225', '250', '450', '500', '750', '850', '1000', '2250',
|
||||
'2500'], size=(8, 20), default_value=mk)],
|
||||
[Sgi.Text(_('Наценка, %.')), Sgi.Push(), Sgi.InputText(marg, size=(10, 10), justification='right')],
|
||||
[Sgi.Text('')]
|
||||
]
|
||||
layout2 = [
|
||||
[Sgi.Text(_('Стоимость вашего принтера, ')+f'{currency_setts()}'), Sgi.Push(), Sgi.InputText(a, size=(10, 10),
|
||||
justification='right')],
|
||||
[Sgi.Text(_('Срок полезного использования, лет.')), Sgi.Push(), Sgi.InputText(spi, size=(10, 10),
|
||||
justification='right')],
|
||||
[Sgi.Text('_' * 45)], [Sgi.Text(amortization_calc)],
|
||||
[Sgi.Text('')]
|
||||
]
|
||||
layout3 = [
|
||||
[Sgi.Text(_('Оформление'))],
|
||||
[Sgi.Text(_("Выбор темы")), Sgi.Push(), Sgi.Combo(themes_list, size=(20, 20), default_value=theme)],
|
||||
[Sgi.Text(_("Язык")), Sgi.Push(), Sgi.Combo(lang_list, size=(20, 20), default_value=locale)],
|
||||
[Sgi.Text(_("Валюта")), Sgi.Push(), Sgi.Combo(currency_list, size=(20, 20), default_value=currency_setts())],
|
||||
]
|
||||
|
||||
tab_group = [
|
||||
[Sgi.TabGroup(
|
||||
[[Sgi.Tab(_('Основные настройки'), layout1), Sgi.Tab(_('Амортизация'), layout2),
|
||||
Sgi.Tab(_('Оформление'), layout3)]]
|
||||
), [Sgi.Push(), Sgi.Button(_('Применить'))]]]
|
||||
|
||||
window = Sgi.Window(_("Настройки"), tab_group, modal=True)
|
||||
while True:
|
||||
event, values = window.read()
|
||||
if event == _('Применить'):
|
||||
if values[8] == theme:
|
||||
new_theme = theme
|
||||
else:
|
||||
new_theme = values[8]
|
||||
if values[9] == locale:
|
||||
new_locale = locale
|
||||
else:
|
||||
new_locale = values[9]
|
||||
if values[10] == currency:
|
||||
new_currency = currency
|
||||
else:
|
||||
new_currency = values[10]
|
||||
if values[0] == p:
|
||||
new_p = p
|
||||
else:
|
||||
new_p = values[0]
|
||||
if values[1] == h:
|
||||
new_h = h
|
||||
else:
|
||||
new_h = values[1].replace(',', '.')
|
||||
if values[2] == d:
|
||||
new_d = d
|
||||
else:
|
||||
new_d = values[2].replace(',', '.')
|
||||
if values[3] == st:
|
||||
new_st = st
|
||||
else:
|
||||
new_st = values[3]
|
||||
if values[4] == mk:
|
||||
new_mk = mk
|
||||
else:
|
||||
new_mk = values[4]
|
||||
if values[5] == marg:
|
||||
new_marg = marg
|
||||
else:
|
||||
new_marg = values[5].replace(',', '.')
|
||||
if values[6] == a:
|
||||
new_a = a
|
||||
else:
|
||||
new_a = values[6]
|
||||
if values[7] == spi:
|
||||
new_spi = spi
|
||||
else:
|
||||
new_spi = values[7]
|
||||
|
||||
with open('setts.json', 'w') as file:
|
||||
data = {"settings": {"theme": new_theme,
|
||||
"p": new_p,
|
||||
"h": new_h,
|
||||
"d": new_d,
|
||||
"st": new_st,
|
||||
"mk": new_mk,
|
||||
"a": new_a,
|
||||
"spi": new_spi,
|
||||
"marge": new_marg,
|
||||
"locale": new_locale,
|
||||
"currency": new_currency
|
||||
|
||||
}
|
||||
}
|
||||
json.dump(data, file, indent=2)
|
||||
|
||||
window.close()
|
||||
|
||||
if event == "Exit" or event == Sgi.WIN_CLOSED:
|
||||
break
|
Loading…
Reference in New Issue
Block a user