Merge pull request 'add:README.md' (#2) from develop into master
Reviewed-on: #2
This commit is contained in:
commit
94865e5513
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