Как создать трекер расходов на Python

Как создать трекер расходов на Python. Рисунок 1.

Модули Tikinter, CSV, Matplotlib

Чтобы создать трекер расходов, вам понадобятся модули Tkinter, CSV и Matplotlib. Tkinter позволяет создавать настольные приложения. Он предоставляет ряд виджетов, таких как кнопки, наклейки и текстовые поля, которые упрощают разработку приложений.

Модуль CSV — это встроенная библиотека Python, которая обеспечивает возможность чтения и записи файлов CSV.

С помощью Matplotlib вы можете создавать интерактивные визуализации, такие как графики, диаграммы и диаграммы. Использование его с такими модулями, как OpenCV, может помочь вам освоить методы улучшения изображений.

Чтобы установить эти модули, запустите:

pip установить tk matplotlib

Определите структуру вашего приложения для отслеживания расходов

Начните с импорта необходимых модулей. Определите класс ExpenseTrackerApp. Установите заголовок и размер. Определите один список для сохранения расходов и другой список для папки. Инициализируйте StringVar имени категории и установите его начальное значение для первой категории в списке. Завершите вызовом метода create_widgets.

импортировать tkinter как tk из tkinter import ttk, messagebox, simpledialog import csv import matplotlib.pyplot as plt class ExpenseTrackerApp(tk.Tk): def __init__(self): super().__init__() self.title(“Expense Tracker”) self.geometry(“1300×600”) self.expenses = () self.categories = (“Еда”, “Транспорт”, “Коммунальные услуги”, “Развлечения”, “Другое”, ) self.category_var = tk.StringVar(self) self.category_var.set(self.categories(0)) self.create_widgets()

Метод create_widgets отвечает за добавление элементов пользовательского интерфейса в приложение. Создайте рамку для меток и элементов записи расходов. Создайте 6 ярлыков: один для названия, суммы стоимости, описания товара, категории, даты и общей стоимости. Установите родительский элемент каждого элемента, отображаемый контент и стиль его шрифта.

Создайте 3 виджета ввода и поле со списком, чтобы получить соответствующий ввод. Для виджета ввода установите родительский элемент, стиль и ширину шрифта. Укажите родительский элемент, список значений, стиль шрифта и ширину для поля со списком. Привяжите к нему категорию_var, чтобы выбранное значение автоматически обновлялось.

def create_widgets(self): self.label = tk.Label( self, text=”Отслеживание расходов”, шрифт=(“Helvetica”, 20, “жирный”) ) self.label.pack(pady=10) self.frame_input = tk.Frame(self) self.frame_input.pack(pady=10) self.expense_label = tk.Label( self.frame_input, text=”Сумма расходов:”, font=(“Helvetica”, 12)) self.expense_label .grid(row=0,column=0,padx=5) self.expense_entry = tk.Entry(self.frame_input, font=(“Helvetica”, 12), width=15 ) self.expense_entry.grid(row=0 ,column=1,padx=5) self.item_label = tk.Label( self.frame_input, text=”Описание элемента:”, font=(“Helvetica”, 12)) self.item_label.grid(row=0, columns =2,padx=5) self.item_entry = tk.Entry(self.frame_input, font=(“Helvetica”, 12), ширина=20) self.item_entry.grid(row=0, columns=3,padx=5 ) self.category_label = tk.Label( self.frame_input, text=”Category:”, font=(“Helvetica”, 12)) self.category_label.grid(row=0, columns=4,padx=5) self. Category_dropdown = ttk.Combobox( self.frame_input, textvariable=self.category_var, значения=self.categories, шрифт=(“Helvetica”, 12), ширина=15, ) self.category_dropdown.grid(row=0, columns=5 ,padx=5) self.date_label = tk.Label( self.frame_input, text=”Дата (ГГГГ-ММ-ДД):”, font=(“Helvetica”, 12)) self.date_label.grid(row=0 ,column=6,padx=5) self.date_entry = tk.Entry(self.frame_input, font=(“Helvetica”, 12), width=15) self.date_entry.grid(row=0, columns=7,padx =5)

Определите 5 кнопок: «Добавить расход», «Изменить расход», «Удалить расход», «Сохранить расходы» и «Показать диаграмму расходов». Установите корневой элемент для каждой кнопки, содержимое, которое она будет отображать, и команду, которую она будет запускать при нажатии на нее. Создайте рамку для списка. Установите корень элемента, стиль шрифта и ширину.

Создайте вертикальную полосу прокрутки и разместите ее в правой части холста. Используйте его для прокрутки содержимого списка. Выровняйте весь элемент с необходимым дополнением и вызовите update_total_label() .

self.add_button = tk.Button(self, text=”Добавить расходы”, команда=self.add_expense) self.add_button.pack(pady=5) self.frame_list = tk.Frame(self) self.frame_list.pack(pady =10) self.scrollbar = tk.Scrollbar(self.frame_list) self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y) self.expense_listbox = tk.Listbox( self.frame_list, font=(“Helvetica “, 12), width=70, yscrollcommand=self.scrollbar.set, ) self.expense_listbox.pack(pady=5) self.scrollbar.config(command=self.expense_listbox.yview) self.edit_button = tk.Button( self, text=”Редактировать расходы”, команда=self.edit_expense ) self.edit_button.pack(pady=5) self.delete_button = tk.Button( self, text=”Удалить расходы”, команда=self.delete_expense ) self. delete_button.pack(pady=5) self.save_button = tk.Button( self, text=”Сохранить расходы”, команда=self.save_expenses ) self.save_button.pack(pady=5) self.total_label = tk.Label( self , text=”Общие расходы:”, font=(“Helvetica”, 12) ) self.total_label.pack(pady=5) self.show_chart_button = tk.Button( self, text=”Показать диаграмму расходов”, команда=self .show_expenses_chart) self.show_chart_button.pack(pady=5) self.update_total_label()

Определить функциональность инструмента отслеживания расходов

Определите метод add_expense. Получите значение расходов, статей, категорий и дат. Если значение и дата расходов действительны, добавьте расходы в список расходов. Вставьте эту запись в список и отформатируйте ее соответствующим образом. После вставки очистите введенные пользователем данные в полях ввода для нового ввода.

В противном случае появится предупреждение о том, что значение стоимости и даты не может быть пустым. Вызовите update_total_label.

def add_expense(self): расход = self.expense_entry.get() item = self.item_entry.get() категория = self.category_var.get() date = self.date_entry.get() если расходы и дата: self.expenses .append((расход, позиция, категория, дата)) self.expense_listbox.insert( tk.END, f”{expense} – {item} – {category} ({date})” ) self.expense_entry.delete(0 , tk.END) self.item_entry.delete(0, tk.END) self.date_entry.delete(0, tk.END) else: messagebox.showwarning(“Предупреждение”, “Расходы и дата не могут быть пустыми.”) self .update_total_label()

Определите метод edit_expense. Получите индекс выбранной записи и получите стоимость. Открывает диалоговое окно с запросом ввода расходов. Если пользователь предоставил новые затраты, измените список затрат соответствующим образом. Вызовите Refresh_list и update_total_label.

def edit_expense(self): selected_index = self.expense_listbox.curselection() if selected_index: selected_index = selected_index(0) selected_expense = self.expenses(selected_index) new_expense = simpledialog.askstring( “Редактировать расходы”, “Ввести новые расходы:”, начальное значение=выбранный_расход(0)), если новый_расход: self.expenses(selected_index) = (new_expense, selected_expense(1), selected_expense(2), selected_expense(3), ) self.refresh_list() self.update_total_label()

Определите метод delete_expense. Получите индекс выбранной записи и получите стоимость. Измените индекс записи, которую хотите удалить. Удалите эту запись из списка и вызовите update_total_label.

def delete_expense(self): selected_index = self.expense_listbox.curselection() if selected_index: selected_index = selected_index(0) del self.expenses(selected_index) self.expense_listbox.delete(selected_index) self.update_total_label()

Определите метод обновления_списка. Удалите текущую запись и добавьте новую запись с обновленными значениями.

def обновить_list(self): self.expense_listbox.delete(0, tk.END) для расходов, позиции, категории, даты в self.expenses: self.expense_listbox.insert(tk.END, f”{expense} – {item} – {категория} ({дата})” )

Определяет метод update_total_label. Суммируйте все затраты в списке и обновите их на этикетке. Определите другой метод, save_expenses. Создайте и откройте файл CSV с именем Costs.csv в режиме записи. Добавьте заголовки столбцов CSV-файла в первую строку. Повторите каждую запись о расходах и запишите ее подряд.

def update_total_label(self): total_expenses = sum(float(expense(0)) для расходов в self.expenses) self.total_label.config(text=f”Общие расходы: USD {total_expenses:.2f}”) def save_expenses(self ): с open(“expenses.csv”, “w”, newline=””) в виде csvfile: Writer = csv.writer(csvfile) columns_headers = (“Сумма расходов”, “Описание элемента”, “Категория”, “Дата” “) Writer.writerow(column_headers) для расходов в self.expenses:writer.writerow(expense))

Определите метод show_expenses_chart. Определяет словарь Category_totals. Просмотрите список расходов и преобразуйте сумму расходов в плавающую. Сохраните общие затраты для каждой категории. Если категория уже существует в словаре, увеличьте общую сумму до текущей суммы затрат. Если нет, создайте новую запись с текущей общей стоимостью.

def show_expenses_chart(self): категория_totals = {} для расходов, _, категория, _ в self.expenses: попробуйте: количество = float(расходы), кроме ValueError: продолжить Category_totals(категория) = Category_totals.get(категория, 0) + сумма

Получение категорий и затрат в двух разных списках. Создайте новый стиль карты с определенными размерами. Создайте круговую диаграмму, используя список расходов в качестве данных и категории в качестве меток. Параметр autopct определяет формат отображения процентных значений на участках графика. Преобразуйте значение plt.axis, чтобы гарантировать, что данные, которые вы рисуете, имеют круговую форму. Дайте круговой диаграмме название и отобразите ее.

категории = список(category_totals.keys()) расходы = список(category_totals.values()) plt.figure(figsize=(8, 6)) plt.pie( расходы, labels=categories, autopct=”%1.1f%% “, startangle=140,shadow=True ) plt.axis(“equal”) plt.title(f”Распределение категорий расходов (USD)”) plt.show()

Создайте экземпляр ExpenseTrackerApp. Функция mainloop() сообщает Python о необходимости зацикливать события Tkinter и прослушивать их, пока вы не закроете окно.

if __name__ == “__main__”: app = ExpenseTrackerApp() app.mainloop()

Ознакомьтесь с различными функциями приложения для управления расходами на Python.

Когда вы запустите эту программу, она откроет окно приложения. Внутри находятся поля ввода для записи затрат, описаний товаров, категорий и дат. Введите некоторые данные и нажмите кнопку «Добавить расход». Вы увидите запись, добавленную в список. Эта программа также обновляет общую стоимость.

Как создать трекер расходов на Python. Рисунок 2.

Выберите запись и нажмите кнопку «Изменить расходы». Появится диалоговое окно, позволяющее обновить каждую запись.

Как создать трекер расходов на Python. Рисунок 3.

Нажмите кнопку «Удалить расходы», чтобы удалить выбранную запись.

Как создать трекер расходов на Python. Рисунок 4.

При нажатии кнопки «Показать диаграмму расходов» программа отображает круговую диаграмму. На круговой диаграмме показана стоимость каждой категории, а также ее название и процент.

Как создать трекер расходов на Python. Рисунок 5.

Вы можете добавить функцию поиска, чтобы пользователи могли находить конкретные затраты по описанию, количеству, папке или дате. Вы можете добавить к записям параметры сортировки и фильтрации. Локализуйте свое приложение для нескольких языков и форматов валют.

Надеюсь, статья окажется для вас полезной.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *