I'm trying to code a calculator that helps us count what margins we need to buy and sell cars.
This is the code, I am not getting any error messages but a window does not pop up anyways.
import tkinter as tk
from tkinter import messagebox
# define base margins for different selling price ranges
BASE_MARGINS = {
100000: 27500,
200000: 32500,
300000: 35000
}
# define costs for different expenses
EXPENSE_COSTS = {
'1 panel lack': 2000,
'2 paneler lack': 4000,
'3 paneler lack': 6000,
'4 paneler lack': 8000,
'Saknar nyckel': 3000,
'liten service': 4000,
'stor service': 10000
}
class MarginCalculator(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.master.title("Margin calculator")
self.create_widgets()
self.master.deiconify()
def create_widgets(self):
# create widgets for selling price
tk.Label(self.master, text="Selling price:").grid(row=0, column=0, sticky="W")
self.selling_price_entry = tk.Entry(self.master)
self.selling_price_entry.grid(row=0, column=1)
# create widgets for expense options
tk.Label(self.master, text="Expenses:").grid(row=1, column=0, sticky="W")
self.expense_vars = {}
for i, expense in enumerate(EXPENSE_COSTS):
var = tk.BooleanVar()
self.expense_vars[expense] = var
tk.Checkbutton(self.master, text=expense, variable=var).grid(row=i+2, column=0, sticky="W")
# create buttons for showing/hiding expense options and calculating margin
self.show_button = tk.Button(self.master, text="Show expenses", command=self.show_expenses)
self.show_button.grid(row=len(EXPENSE_COSTS)+2, column=0, sticky="W", padx=5, pady=5)
self.hide_button = tk.Button(self.master, text="Hide expenses", command=self.hide_expenses, state=tk.DISABLED)
self.hide_button.grid(row=len(EXPENSE_COSTS)+2, column=1, sticky="W", padx=5, pady=5)
self.calculate_button = tk.Button(self.master, text="Calculate", command=self.calculate_margin)
self.calculate_button.grid(row=len(EXPENSE_COSTS)+2, column=2, sticky="W", padx=5, pady=5)
# create labels for displaying margin results
tk.Label(self.master, text="Base margin:").grid(row=len(EXPENSE_COSTS)+3, column=0, sticky="W")
self.base_margin_label = tk.Label(self.master, text="")
self.base_margin_label.grid(row=len(EXPENSE_COSTS)+3, column=1, sticky="W")
tk.Label(self.master, text="Expenses:").grid(row=len(EXPENSE_COSTS)+4, column=0, sticky="W")
self.expenses_label = tk.Label(self.master, text="")
self.expenses_label.grid(row=len(EXPENSE_COSTS)+4, column=1, sticky="W")
tk.Label(self.master, text="Margin needed:").grid(row=len(EXPENSE_COSTS)+5, column=0, sticky="W")
self.margin_needed_label = tk.Label(self.master, text="")
self.margin_needed_label.grid(row=len(EXPENSE_COSTS)+5, column=1, sticky="W")
tk.Label(self.master, text="Our offer:").grid(row=len(EXPENSE_COSTS)+6, column=0, sticky="W")
self.our_offer_label = tk.Label(self.master, text="")
self.our_offer_label.grid(row=len(EXPENSE_COSTS)+6, column=1, sticky="W")
def show_expenses(self):
self.show_button.config(state=tk.DISABLED)
self.hide_button.config(state=tk.NORMAL)
for expense, var in self.expense_vars.items():
var.set(True)
def hide_expenses(self):
self.show_button.config(state=tk.NORMAL)
self.hide_button.config(state=tk.DISABLED)
for expense, var in self.expense_vars.items():
var.set(False)
def calculate_margin(self):
# get selling price from entry
try:
selling_price = int(self.selling_price_entry.get())
except ValueError:
messagebox.showerror("Error", "Selling price must be a whole number")
return
# get expenses from checkboxes
expenses = sum(EXPENSE_COSTS[expense] for expense, var in self.expense_vars.items() if var.get())
# calculate base margin based on selling price
base_margin = 0
for price, margin in BASE_MARGINS.items():
if selling_price <= price:
base_margin = margin
break
# calculate margin needed and our offer
margin_needed = selling_price - base_margin
our_offer = selling_price - base_margin - expenses
# update labels with results
self.base_margin_label.config(text=f"{base_margin} SEK")
self.expenses_label.config(text=f"{expenses} SEK")
self.margin_needed_label.config(text=f"{margin_needed} SEK")
self.our_offer_label.config(text=f"{our_offer} SEK")
def main():
root = tk.Tk()
MarginCalculator(root).pack()
root.geometry("400x400+100+100")
root.mainloop()
I've tried everything I could think of. Even asked Chat GPT to fix the problem but it told me everything should be ok.