В этот раз я решил написать какую-нибудь полезную программу на питоне. В качестве таковой был выбран кредитный калькулятор. Логика программы будет достаточно простой. Пользователь вводит следующие значения: сумма кредита; срок кредитования; процентная ставка; сумма дополнительных платежей (страховки и т д). На выходе пользователь получает значение ежемесячных платежей и суммы переплаты по процентам и т д.
Итак, для начала определимся с каким модулем мы будем строить интерфейс. Выбор пал на tkinter и customtkinter. В качестве декорации фона будет задействован модуль pillow.
Вся программа уместится в один класс Main(Frame). Создадим функцию инициации.
Здесь мы прописали логотип-подложку в виде изображения темной темы customtkinter, а также прописали размеры этой подложки. Изображение будет расположено в лейбле с заданными параметрами смещения по строкам и столбцам.
Далее пропишем элементы интерфейса в функции build.
В качестве элемента для вывода информации по кредитному расчету выступит тексбокс от customtkinter (CTk.CTkTextbox) с соответствующими праметрами оформления (шрифт, цвет фона и т д) и расположения.
Далее введем еще один лейбл, цель которого быть ссылкой на изображение, оформляющее кнопки программы. Для простоты, изображение основного фона программы и кнопок одно и тоже.
Далее идет набор элементов лейбл (CTk.CTkLabel) и энтри (CTk.CTkEntry) все от того-же customtkinter, куда мы будем вбивать значения, которые мы определили вначале.
Теперь создадим кортеж кнопок, которые будут ссылаться на логическую часть кода нашей программы (logic). Всего будет три кнопки: “Рассчитать параметры кредита”, “Сохранить текст”, “Справка”.
Соответственно, при нажатии на первую кнопку будет выполнен собственно сам кредитный расчет с выводом результатов в текстбокс. При нажатии на вторую кнопку мы сможем сохранить результаты расчета в файл текстового формата (txt, doc и т д). Ну а третья кнопка будет вызывать информационное сообщение с неким текстом о программе.
Кроме того, прописаны параметры переноса кнопок на последующие строки. А с помощью-лямбда функции мы прописали собственно само поведение программы при нажатии на ту или иную кнопку.
Переходим к логической функции:
Здесь у нас работает логическая связка между тем какую мы кнопку нажали и результатом нажатия.
При нажатии на первую кнопку производится считывание значений наших параметров из элементов CTk.CTkEntry и присваивание их в некие переменные. Далее, на основе имеющихся переменных, производится собственно сам расчет. Мы считаем следующие параметры: общая сумма выплат за n лет, размер ежемесячного платежа, размер общей переплаты по кредиту (в рублях и %%-ах).
Далее нам необходимо составить некий текстовый шаблон, в который мы расставим результаты нашего расчета. Шаблон следующего вида:
content = f’текст {tkr} текст2 {okn} рублей. … \n’
Как видно, наши переменные отделяются от основного текста через фигурные скобки. Завершает шаблон следующая последовательность символов (\n) которая позволяет производить подряд несколько расчетов, при этом каждый из них будет начинаться с красной строки.
Собрав шаблон, мы наконец можем его вывести в наш текстбокс.
Далее прописывается логика при нажатии на вторую кнопку. В этот раз мы уже пользуемся не оператором if, а elif.
Суть второй функции заключается в том, что с помощью файл-диалога мы сохраняем наш шаблон в каком-либо формате, какой-либо директории.
Ну а третья кнопка вызывает диалоговое окно типа showinfo, где мы можем прописать название (title), какой-либо текст. Закрыть окно можно с помощью кнопки «ОК».
Вот, собственно, и вся программа. Осталось только прописать хвост.
Полный текстовый код доступен по ссылке: https://sergsergius.ru/credit_calc_python/
У этой программы есть один существенный недостаток. Изображения, используемые для оформления элементов интерфейса, при преобразовании кода в исполняемый exe-файл через auto–py–to–exe, не войдут в него. Для получения программы в одном файле, лучше всего написать ее в pyqt5 фреймворке, с возможностью перевода изображений в ресурс питона (см. предыдущую статью).