source_code[1]
source_code[1]
import tkinter as tk
class FinanceHelper:
self.root = root
self.root.title("Finance Helper")
self.root.geometry("600x700")
self.user_name = ""
self.income = 0
self.period_type = ""
self.periods = 0
self.total_budget = 0
self.budget_goals = {}
self.initial_investment = 0
self.periodic_investment = 0
self.investment_growth_rate = 0
self.investment_periods = 0
self.create_widgets()
def create_widgets(self):
self.label.pack(pady=20, anchor="center")
self.name_entry.pack(pady=10)
self.submit_button.pack(pady=15)
def submit_name(self):
self.user_name = self.name_entry.get().strip()
if not self.user_name:
return
self.label.config(text=f"Welcome, {self.user_name}!")
self.name_label.pack_forget()
self.name_entry.pack_forget()
self.submit_button.pack_forget()
self.choose_period()
def choose_period(self):
self.period_label.pack(pady=15, anchor="center")
self.month_button.pack(pady=10)
self.year_button.pack(pady=10)
self.period_type = period_type
self.period_label.pack_forget()
self.month_button.pack_forget()
self.year_button.pack_forget()
self.income_label.pack(pady=10, anchor="center")
self.income_entry.pack(pady=10)
self.period_count_label.pack(pady=10, anchor="center")
self.period_count_entry.pack(pady=10)
self.start_button.pack(pady=15)
def setup_budget_goals(self):
try:
self.income = float(self.income_entry.get().strip())
self.periods = int(self.period_count_entry.get().strip())
except ValueError as e:
messagebox.showerror("Error", str(e))
return
widget.pack_forget()
self.budget_label = tk.Label(self.root,
self.budget_label.pack(pady=20, anchor="center")
self.summary_label.pack(pady=20, anchor="center")
font=("Arial", 12))
self.goal_label.pack(pady=15, anchor="center")
self.category_label.pack(pady=10, anchor="center")
self.category_entry = tk.Entry(self.root, font=("Arial", 12), width=25,
justify="center")
self.category_entry.pack(pady=10)
self.goal_amount_label.pack(pady=10, anchor="center")
self.goal_amount_entry.pack(pady=10)
command=self.save_budget_goal)
self.add_goal_button.pack(pady=10)
self.finish_goals_button.pack(pady=15)
self.goals_display.pack(pady=15, anchor="center")
def save_budget_goal(self):
category = self.category_entry.get().strip()
try:
goal_amount = float(self.goal_amount_entry.get().strip())
if goal_amount <= 0:
raise ValueError("Budget goal must be a positive number")
except ValueError as e:
messagebox.showerror("Error", str(e))
return
if not category:
return
self.budget_goals[category] = goal_amount
total_allocated = 0
total_allocated += amount
self.goals_display.config(text=goals_text)
messagebox.showinfo("Success", f"Added goal: {category} -
rs{goal_amount:,.2f}")
self.category_entry.delete(0, tk.END)
self.goal_amount_entry.delete(0, tk.END)
def setup_expenses(self):
if not self.budget_goals:
return
self.goal_amount_label, self.goal_amount_entry,
self.add_goal_button, self.finish_goals_button,
self.goals_display]:
widget.pack_forget()
self.budget_label.pack(pady=20, anchor="center")
self.categories_label.pack(pady=4, anchor="center")
self.expenses_label.pack(pady=4, anchor="center")
self.expense_category_label.pack(pady=3, anchor="center")
self.expense_category_var = tk.StringVar(self.root)
self.expense_category_menu.config(font=("Arial", 10))
self.expense_category_menu.pack(pady=3)
self.expense_item_label.pack(pady=3, anchor="center")
self.expense_item_entry.pack(pady=3)
self.expense_cost_label.pack(pady=3, anchor="center")
self.expense_cost_entry.pack(pady=3)
self.add_expense_button.pack(pady=4)
self.finish_expenses_button.pack(pady=4)
self.investment_button.pack(pady=4)
def save_expense(self):
category = self.expense_category_var.get()
subject = self.expense_item_entry.get().strip()
try:
money_spent = float(self.expense_cost_entry.get().strip())
if money_spent <= 0:
except ValueError as e:
messagebox.showerror("Error", str(e))
return
return
if not subject:
return
self.money_spent += money_spent
self.expense_category_var.set("Select Category")
self.expense_item_entry.delete(0, tk.END)
self.expense_cost_entry.delete(0, tk.END)
def open_investment_window(self):
self.investment_window = tk.Toplevel(self.root)
self.investment_window.title("Investment Planning")
self.investment_window.geometry("400x400")
self.initial_investment_label.pack(pady=10, anchor="center")
self.initial_investment_entry = tk.Entry(self.investment_window,
font=("Arial", 12), width=20, justify="center")
self.initial_investment_entry.pack(pady=10)
self.periodic_investment_label = tk.Label(self.investment_window,
text="Periodic Investment (rs):", font=("Arial", 12))
self.periodic_investment_label.pack(pady=10, anchor="center")
self.periodic_investment_entry = tk.Entry(self.investment_window,
font=("Arial", 12), width=20, justify="center")
self.periodic_investment_entry.pack(pady=10)
self.growth_rate_label = tk.Label(self.investment_window,
text="Investment Growth Rate (% per year):", font=("Arial", 12))
self.growth_rate_label.pack(pady=10, anchor="center")
self.growth_rate_entry.pack(pady=10)
self.investment_period_label = tk.Label(self.investment_window,
text="Number of Years:", font=("Arial", 12))
self.investment_period_label.pack(pady=10, anchor="center")
self.investment_period_entry = tk.Entry(self.investment_window,
font=("Arial", 12), width=20, justify="center")
self.investment_period_entry.pack(pady=10)
self.save_investment_button = tk.Button(self.investment_window,
text="Save Investment Plan", font=("Arial", 12), width=20,
command=self.save_investment_plan)
self.save_investment_button.pack(pady=15)
def save_investment_plan(self):
try:
self.initial_investment =
float(self.initial_investment_entry.get().strip())
self.periodic_investment =
float(self.periodic_investment_entry.get().strip())
self.investment_growth_rate =
float(self.growth_rate_entry.get().strip())
self.investment_periods =
int(self.investment_period_entry.get().strip())
if self.investment_growth_rate < 0:
except ValueError as e:
messagebox.showerror("Error", str(e))
return
self.investment_window.destroy()
self.calculate_investment_plan()
def calculate_investment_plan(self):
final_amount = self.initial_investment
for _ in range(self.investment_periods):
final_amount += self.periodic_investment
summary_window = tk.Toplevel(self.root)
summary_window.title("Investment Summary")
summary_window.geometry("400x300")
def show_summary(self):
widget.pack_forget()
main_frame = tk.Frame(self.root)
main_frame.pack(fill=tk.BOTH, expand=1)
canvas = tk.Canvas(main_frame)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
canvas.configure(yscrollcommand=scrollbar.set)
canvas.bind('<Configure>', lambda e:
canvas.configure(scrollregion=canvas.bbox("all")))
summary_frame = tk.Frame(canvas)
summary_label.pack(pady=20, anchor="center")
subject_expenses = {}
subject_expenses[subject] += money_spent
else:
subject_expenses[subject] = money_spent
if subject_expenses:
fg=summary_color).pack(pady=10, anchor="center")
if category_expenses:
if total_salary > 0:
fg=savings_color).pack(pady=15, anchor="center")
root = tk.Tk()
app = FinanceHelper(root)
root.mainloop()