Compare commits
No commits in common. "master" and "v.0.4.3b_Win7" have entirely different histories.
master
...
v.0.4.3b_W
89
README.md
89
README.md
@ -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
174
setts.py
Normal 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
|
Loading…
Reference in New Issue
Block a user