Compare commits

..

No commits in common. "master" and "v.0.4.3b_Win7" have entirely different histories.

3 changed files with 174 additions and 89 deletions

View File

@ -1,89 +0,0 @@
# Calc3D by Risen
Калькулятор Calc3D by Risen предназначен для быстрой оценки стоимости печати на 3D принтере,
исходя из стоимости пластика, веса, тарифа электроэнергии и прочего...
## Содержание
- [Wiki проекта](#wiki-проекта)
- [Как скачать](#как-скачать)
- [FAQ](#faq)
- [Зачем это всё](#почему-я-решил-реализовать-этот-проект?)
- [Команда проекта](#команда-проекта)
- [Лицензия](#лицензия)
- [Поддержать проект](#поддержать-проект)
## Wiki проекта
- [Как каклькулятор расчитывает стоимость](https://git.risenhome.xyz/risen/Antivoice/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0-%D1%80%D0%B0%D1%81%D1%87%D0%B5%D1%82%D0%B0)
## Как скачать
Переходим в раздел "Релизы" вверху страницы или по это ссылке: [релизы](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.
```
## Поддержать проект
Если вы хотите поддержать проект, то можете воспользоваться данными инструментами:
[Ссылка на Т-банк](https://www.tinkoff.ru/cf/AzAcanQBWZx)
или qr-код:
<div id="header" align="left">
<img src="https://risenhome.xyz/images/photo_2024-08-17_15-54-57.jpg" width="200" height=""/>
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

174
setts.py Normal file
View File

@ -0,0 +1,174 @@
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