अपनी गणित प्रोग्रामिंग का अभ्यास करने और साथ ही जीयूआई कोडिंग के बारे में थोड़ा सीखने के लिए यह सरल ऐप बनाएं।

व्यय ट्रैकर एक आवश्यक उपकरण है जो व्यक्तियों और व्यवसायों को उनके वित्तीय लेनदेन का प्रबंधन करने में मदद करता है। व्यय ट्रैकर के साथ, आप बजट बना सकते हैं, खर्चों को वर्गीकृत कर सकते हैं और खर्च करने के पैटर्न का विश्लेषण कर सकते हैं।

जानें कि पायथन में क्रॉस-प्लेटफॉर्म जीयूआई के साथ व्यय ट्रैकर ऐप कैसे बनाया जाए।

टिंकर, सीएसवी, और मैटप्लोटलिब मॉड्यूल

इस व्यय ट्रैकर को बनाने के लिए, आपको टिंकर, सीएसवी और मैटप्लोटलिब मॉड्यूल की आवश्यकता होगी।

टिंकर आपको इसकी सुविधा देता है डेस्कटॉप एप्लिकेशन बनाएं. यह बटन, लेबल और टेक्स्ट बॉक्स जैसे विभिन्न प्रकार के विजेट प्रदान करता है जो ऐप्स विकसित करना आसान बनाता है।

सीएसवी मॉड्यूल एक अंतर्निहित पायथन लाइब्रेरी है जो पढ़ने और लिखने के लिए कार्यक्षमता प्रदान करता है सीएसवी (अल्पविराम से अलग किए गए मान) फ़ाइलें.

Matplotlib के साथ, आप ग्राफ़, प्लॉट और चार्ट जैसे इंटरैक्टिव विज़ुअलाइज़ेशन बना सकते हैं। OpenCV जैसे मॉड्यूल के साथ इसका उपयोग करने से आपको मदद मिल सकती है छवि वृद्धि तकनीकों में महारत हासिल करें बहुत।

instagram viewer

इन मॉड्यूल को स्थापित करने के लिए, चलाएँ:

pip install tk matplotlib 

व्यय ट्रैकर ऐप की संरचना को परिभाषित करें

आप इस प्रोजेक्ट का सोर्स कोड इसमें पा सकते हैं गिटहब रिपॉजिटरी.

आवश्यक मॉड्यूल आयात करके प्रारंभ करें। एक वर्ग परिभाषित करें, एक्सपेंसट्रैकर ऐप. शीर्षक और आयाम सेट करें. खर्चों को संग्रहित करने के लिए एक सूची और श्रेणियों के लिए दूसरी सूची परिभाषित करें। आरंभ करें a स्ट्रिंगवार नाम श्रेणी_वर और इसका प्रारंभिक मान श्रेणियों की सूची में पहली श्रेणी पर सेट करें। को कॉल करके समाप्त करें create_widgets तरीका।

import tkinter as tk
from tkinter import ttk, messagebox, simpledialog
import csv
import matplotlib.pyplot as plt

classExpenseTrackerApp(tk.Tk):
def__init__(self):
super().__init__()
self.title("Expense Tracker")
self.geometry("1300x600")
self.expenses = []
self.categories = [
"Food",
"Transportation",
"Utilities",
"Entertainment",
"Other",
]
self.category_var = tk.StringVar(self)
self.category_var.set(self.categories[0])
self.create_widgets()

create_widgets विधि आपके ऐप में यूआई घटकों को जोड़ने के लिए ज़िम्मेदार है। व्यय रिकॉर्ड के लेबल और प्रविष्टियों के लिए एक फ़्रेम बनाएं। छह लेबल बनाएं: शीर्षक, व्यय राशि, आइटम विवरण, श्रेणी, दिनांक और कुल व्यय के लिए एक-एक। प्रत्येक का मूल तत्व, उसे प्रदर्शित होने वाला टेक्स्ट और उसकी फ़ॉन्ट शैली सेट करें।

तीन प्रवेश विजेट बनाएं और एक सम्मिश्रण पटी संबंधित इनपुट प्राप्त करने के लिए. प्रवेश विजेट के लिए, मूल तत्व, फ़ॉन्ट शैली और चौड़ाई सेट करें। मूल तत्व, मानों की सूची, फ़ॉन्ट शैली और चौड़ाई को परिभाषित करें सम्मिश्रण पटी. बाँध श्रेणी_वर इसके लिए, इसलिए चयनित मान स्वचालित रूप से अपडेट हो जाता है।

defcreate_widgets(self):
self.label = tk.Label(
self, text="Expense Tracker", font=("Helvetica", 20, "bold")
)
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="Expense Amount:", 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="Item Description:", font=("Helvetica", 12)
)
self.item_label.grid(row=0, column=2, padx=5)
self.item_entry = tk.Entry(self.frame_input, font=("Helvetica", 12), width=20)
self.item_entry.grid(row=0, column=3, padx=5)
self.category_label = tk.Label(
self.frame_input, text="Category:", font=("Helvetica", 12)
)
self.category_label.grid(row=0, column=4, padx=5)
self.category_dropdown = ttk.Combobox(
self.frame_input,
textvariable=self.category_var,
values=self.categories,
font=("Helvetica", 12),
width=15,
)
self.category_dropdown.grid(row=0, column=5, padx=5)
self.date_label = tk.Label(
self.frame_input, text="Date (YYYY-MM-DD):", 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, column=7, padx=5)

पाँच बटन परिभाषित करें: व्यय जोड़ें, व्यय संपादित करें, व्यय हटाएँ, खर्च बचाएं, और व्यय चार्ट दिखाएँ. प्रत्येक का मूल तत्व, उसे प्रदर्शित होने वाला टेक्स्ट और जब आप उस पर क्लिक करेंगे तो वह कमांड चलाएगा, सेट करें। सूची बॉक्स के लिए एक फ़्रेम बनाएं. मूल तत्व, फ़ॉन्ट शैली और चौड़ाई सेट करें।

एक लंबवत स्क्रॉल बार बनाएं और इसे फ़्रेम के दाईं ओर रखें। सूची बॉक्स की सामग्री को स्क्रॉल करने के लिए इसका उपयोग करें। सभी तत्वों को आवश्यक पैडिंग के साथ व्यवस्थित करें और कॉल करें अद्यतन_कुल_लेबल().

 self.add_button = tk.Button(self, text="Add Expense", command=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="Edit Expense", command=self.edit_expense
)
self.edit_button.pack(pady=5)
self.delete_button = tk.Button(
self, text="Delete Expense", command=self.delete_expense
)
self.delete_button.pack(pady=5)
self.save_button = tk.Button(
self, text="Save Expenses", command=self.save_expenses
)
self.save_button.pack(pady=5)
self.total_label = tk.Label(
self, text="Total Expenses:", font=("Helvetica", 12)
)
self.total_label.pack(pady=5)
self.show_chart_button = tk.Button(
self, text="Show Expenses Chart", command=self.show_expenses_chart
)
self.show_chart_button.pack(pady=5)
self.update_total_label()

व्यय ट्रैकर की कार्यक्षमता को परिभाषित करें

एक विधि परिभाषित करें, add_expense. व्यय, वस्तु, श्रेणी और दिनांक का मूल्य पुनः प्राप्त करें। यदि व्यय का मूल्य और तारीख मान्य है, तो व्यय को इसमें जोड़ें खर्च सूची। इस रिकॉर्ड को सूची बॉक्स में डालें और इसे उचित रूप से प्रारूपित करें। एक बार डालने के बाद, नए इनपुट के लिए प्रविष्टि बॉक्स में उपयोगकर्ता इनपुट को हटा दें।

अन्यथा, एक चेतावनी प्रदर्शित करें कि व्यय और दिनांक के मान रिक्त नहीं हो सकते। पुकारना अद्यतन_कुल_लेबल.

defadd_expense(self):
expense = self.expense_entry.get()
item = self.item_entry.get()
category = self.category_var.get()
date = self.date_entry.get()
if expense and date:
self.expenses.append((expense, item, category, date))
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("Warning", "Expense and Date cannot be empty.")
self.update_total_label()

एक विधि परिभाषित करें, edit_expense. चयनित रिकॉर्ड का सूचकांक पुनर्प्राप्त करें और व्यय प्राप्त करें। व्यय दर्ज करने के लिए पूछने वाला एक संवाद बॉक्स खोलें। यदि उपयोगकर्ता ने कोई नया व्यय प्रदान किया है, तो तदनुसार व्यय सूची में बदलाव करें। बुलाएं सूची रीफ़्रेश करें और अद्यतन_कुल_लेबल.

defedit_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(
"Edit Expense", "Enter new expense:", initialvalue=selected_expense[0]
)
if new_expense:
self.expenses[selected_index] = (
new_expense,
selected_expense[1],
selected_expense[2],
selected_expense[3],
)
self.refresh_list()
self.update_total_label()

एक विधि परिभाषित करें, हटाएँ_खर्च. चयनित रिकॉर्ड का सूचकांक पुनर्प्राप्त करें और व्यय प्राप्त करें। उस प्रविष्टि की अनुक्रमणिका पास करें जिसे आप हटाना चाहते हैं। उस प्रविष्टि को सूची बॉक्स से हटाएं और कॉल करें अद्यतन_कुल_लेबल.

defdelete_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()

एक विधि परिभाषित करें, सूची रीफ़्रेश करें. मौजूदा रिकॉर्ड हटाएं और उसके स्थान पर अद्यतन मानों के साथ एक नया रिकॉर्ड जोड़ें।

defrefresh_list(self):
self.expense_listbox.delete(0, tk.END)
for expense, item, category, date in self.expenses:
self.expense_listbox.insert(
tk.END, f"{expense} - {item} - {category} ({date})"
)

एक विधि परिभाषित करें, अद्यतन_कुल_लेबल. सूची में सभी खर्चों के योग की गणना करें और इसे लेबल पर अपडेट करें। किसी अन्य विधि को परिभाषित करें, save_expenses. बनाएं और खोलें सीएसवी फ़ाइल का नाम व्यय.सीएसवी लेखन मोड में. CSV फ़ाइल में पहली पंक्ति के रूप में कॉलम हेडर जोड़ें। प्रत्येक व्यय रिकॉर्ड पर पुनरावृति करें, और इसे एक पंक्ति के रूप में लिखें।

defupdate_total_label(self):
total_expenses = sum(float(expense[0]) for expense in self.expenses)
self.total_label.config(text=f"Total Expenses: USD {total_expenses:.2f}")

defsave_expenses(self):
with open("expenses.csv", "w", newline="") as csvfile:
writer = csv.writer(csvfile)
column_headers = ["Expense Amount", "Item Description", "Category", "Date"]
writer.writerow(column_headers)
for expense in self.expenses:
writer.writerow(expense))

एक विधि परिभाषित करें, show_expenses_chart. एक शब्दकोश परिभाषित करें, श्रेणी_कुल. के माध्यम से पुनरावृत्त करें खर्च व्यय राशि को सूचीबद्ध करें और फ़्लोट में बदलें। प्रत्येक श्रेणी के लिए कुल व्यय राशि संग्रहीत करें। यदि श्रेणी पहले से ही शब्दकोश में मौजूद है, तो कुल को वर्तमान व्यय राशि से बढ़ाएँ। अन्यथा, वर्तमान व्यय राशि के साथ एक नई प्रविष्टि बनाएं।

defshow_expenses_chart(self):
category_totals = {}
for expense, _, category, _ in self.expenses:
try:
amount = float(expense)
except ValueError:
continue
category_totals[category] = category_totals.get(category, 0) + amount

श्रेणियों और खर्चों को दो अलग-अलग सूचियों में निकालें। निर्दिष्ट आकार के साथ प्लॉट के लिए एक नया चित्र बनाएं। व्यय सूची को डेटा के रूप में और श्रेणी सूची को लेबल के रूप में उपयोग करके एक पाई चार्ट तैयार करें। autopct पैरामीटर चार्ट स्लाइस पर प्रतिशत मान प्रदर्शित करने के लिए प्रारूप निर्दिष्ट करता है। उत्तीर्ण बराबर को पीएलटी.अक्ष यह सुनिश्चित करने के लिए कि आप पाई चार्ट को एक वृत्त के रूप में बनाएं। पाई चार्ट का शीर्षक सेट करें और उसे प्रदर्शित करें।

 categories = list(category_totals.keys())
expenses = list(category_totals.values())
plt.figure(figsize=(8, 6))
plt.pie(
expenses, labels=categories, autopct="%1.1f%%", startangle=140, shadow=True
)
plt.axis("equal")
plt.title(f"Expense Categories Distribution (USD)")
plt.show()

का एक उदाहरण बनाएं एक्सपेंसट्रैकर ऐप कक्षा। मुख्य घेरा() फ़ंक्शन पायथन को टिंकर ईवेंट लूप चलाने और विंडो बंद करने तक ईवेंट सुनने के लिए कहता है।

if __name__ == "__main__":
app = ExpenseTrackerApp()
app.mainloop()

पायथन एक्सपेंस ट्रैकर की विभिन्न विशेषताओं का परीक्षण करें

जब आप प्रोग्राम चलाएंगे, तो यह एक एप्लिकेशन विंडो लॉन्च करेगा। इसमें व्यय, आइटम विवरण, श्रेणी और तारीख रिकॉर्ड करने के लिए इनपुट फ़ील्ड हैं। कुछ डेटा दर्ज करें और क्लिक करें व्यय जोड़ें बटन; आप देखेंगे कि रिकॉर्ड सूची बॉक्स में जुड़ गया है। कार्यक्रम कुल खर्चों को भी अद्यतन करता है।

एक रिकॉर्ड चुनें और क्लिक करें व्यय संपादित करें बटन। एक संवाद बॉक्स प्रकट होता है, जो आपको व्यक्तिगत रिकॉर्ड अपडेट करने देता है।

क्लिक कर रहा हूँ व्यय हटाएँ चयनित रिकॉर्ड को हटाने के लिए बटन।

मारने पर व्यय चार्ट दिखाएँ बटन, प्रोग्राम एक पाई चार्ट प्रदर्शित करता है। पाई चार्ट प्रत्येक श्रेणी के लिए उसके नाम और प्रतिशत के साथ व्यय प्रदर्शित करता है।

व्यय ट्रैकर में सुधार

आप उपयोगकर्ताओं को उनके विवरण, राशि, श्रेणी या दिनांक के आधार पर विशिष्ट खर्च ढूंढने देने के लिए खोज कार्यक्षमता जोड़ सकते हैं। आप रिकॉर्ड को सॉर्ट और फ़िल्टर करने का विकल्प जोड़ सकते हैं। विभिन्न भाषाओं और मुद्रा प्रारूपों का समर्थन करने के लिए ऐप को स्थानीयकृत करें।

आप सूचनाओं के समर्थन के साथ ऐप का विस्तार भी कर सकते हैं। उपयोगकर्ता को बजट सीमा से अधिक होने से रोकने या किसी असामान्य खर्च को उजागर करने के लिए अलर्ट सेट करने दें।