mam taki kod to jest kalkulator pól i obwodów figur
zależy mi na tym żeby po wybraniu figury i operacji wyświetlała się tylko ta wymagana liczba rubryk do wpisywania wartości jaka musi być nic mniej i nic więcej żeby była perfekcyjna liczba
import tkinter as tk
from tkinter import font
import math
selected_figure = ""
selected_operation = ""
value_entries = []
def select_figure(figure):
global selected_figure
selected_figure = figure
update_value_entries()
show_page(2)
def select_operation(operation):
global selected_operation
selected_operation = operation
show_page(3)
def update_value_entries():
for entry in value_entries:
entry.pack_forget()
entry.destroy()
value_entries.clear()
num_values = get_num_values()
for i in range(num_values):
label_text = f"Wartość {i+1}:"
entry = create_value_entry(label_text)
value_entries.append(entry)
def create_value_entry(label_text):
label = tk.Label(page3, text=label_text, font=default_font)
label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
entry = tk.Entry(page3, font=default_font)
entry.pack(fill=tk.BOTH, expand=True)
return entry
def get_num_values():
if selected_figure == "Kwadrat":
return 1
elif selected_figure in ["Prostokąt", "Równoległobok", "Romb"]:
return 2
elif selected_figure in ["Trójkąt", "Trapez"]:
if selected_operation == "Pole":
return 3
else:
return 2
elif selected_figure == "Koło":
return 1
else:
return 0
def calculate_result():
num_values = get_num_values()
values = []
for i in range(num_values):
value = value_entries[i].get()
try:
value = float(value)
values.append(value)
except ValueError:
result_label.config(text="Błąd: Wprowadź poprawne wartości.")
return
if selected_figure == "Kwadrat":
if selected_operation == "Pole":
result = values[0] ** 2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
result = values[0] * 4
result_label.config(text=f"Obwód: {result}")
elif selected_figure == "Prostokąt" or selected_figure == "Równoległobok":
value2_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value2_entry.pack(fill=tk.BOTH, expand=True)
elif selected_figure == "Trójkąt":
value2_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value2_entry.pack(fill=tk.BOTH, expand=True)
if selected_operation == "Pole":
value3_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value3_entry.pack(fill=tk.BOTH, expand=True)
else:
value3_label.pack_forget()
value3_entry.pack_forget()
elif selected_figure == "Romb":
value2_label.pack_forget()
value2_entry.pack_forget()
elif selected_figure == "Trapez":
value2_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value2_entry.pack(fill=tk.BOTH, expand=True)
if selected_operation == "Pole":
value3_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value3_entry.pack(fill=tk.BOTH, expand=True)
value4_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value4_entry.pack(fill=tk.BOTH, expand=True)
else:
value3_label.pack_forget()
value3_entry.pack_forget()
value4_label.pack_forget()
value4_entry.pack_forget()
elif selected_figure == "Koło":
value2_label.pack_forget()
value2_entry.pack_forget()
def calculate_result():
value = float(value_entry.get())
if selected_figure == "Kwadrat":
if selected_operation == "Pole":
result = value ** 2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
result = value * 4
result_label.config(text=f"Obwód: {result}")
elif selected_figure == "Prostokąt":
if selected_operation == "Pole":
value2 = float(value2_entry.get())
result = value * value2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
value2 = float(value2_entry.get())
result = 2 * (value + value2)
result_label.config(text=f"Obwód: {result}")
elif selected_figure == "Trójkąt":
if selected_operation == "Pole":
value2 = float(value2_entry.get())
result = 0.5 * value * value2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
value2 = float(value2_entry.get())
value3 = float(value3_entry.get())
result = value + value2 + value3
result_label.config(text=f"Obwód: {result}")
elif selected_figure == "Równoległobok":
if selected_operation == "Pole":
value2 = float(value2_entry.get())
result = value * value2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
value2 = float(value2_entry.get())
result = 2 * (value + value2)
result_label.config(text=f"Obwód: {result}")
elif selected_figure == "Romb":
if selected_operation == "Pole":
value2 = float(value2_entry.get())
result = value * value2 / 2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
result = 4 * value
result_label.config(text=f"Obwód: {result}")
elif selected_figure == "Trapez":
if selected_operation == "Pole":
value2 = float(value2_entry.get())
value3 = float(value3_entry.get())
result = ((value + value2) * value3) / 2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
value2 = float(value2_entry.get())
value3 = float(value3_entry.get())
value4 = float(value4_entry.get())
result = value + value2 + value3 + value4
result_label.config(text=f"Obwód: {result}")
elif selected_figure == "Koło":
if selected_operation == "Pole":
result = math.pi * value ** 2
result_label.config(text=f"Pole: {result}")
elif selected_operation == "Obwód":
result = 2 * math.pi * value
result_label.config(text=f"Obwód: {result}")
def show_page(page_number):
page1.pack_forget()
page2.pack_forget()
page3.pack_forget()
if page_number == 1:
page1.pack(fill=tk.BOTH, expand=True)
elif page_number == 2:
page2.pack(fill=tk.BOTH, expand=True)
elif page_number == 3:
page3.pack(fill=tk.BOTH, expand=True)
def go_back(event=None):
if page3.winfo_ismapped():
show_page(2)
elif page2.winfo_ismapped():
show_page(1)
# Pasek Tytułowy
root = tk.Tk()
root.title("PyCalc")
root.iconbitmap(r"Wpiszę tutaj coś spokojnie :)")
# Okienko
window_width = 400
window_height = 400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x_position = (screen_width - window_width) // 2
y_position = (screen_height - window_height) // 2
root.geometry(f"{window_width}x{window_height}+{x_position}+{y_position}")
# Czcionka
default_font = font.Font()
button_font = default_font.copy()
button_font.configure(size=int(round(float(button_font.cget("size")) * 1.3)))
# Strony
page1 = tk.Frame(root)
page2 = tk.Frame(root)
page3 = tk.Frame(root)
# Strona 1 Figury
default_label_font = default_font.copy()
default_label_font.configure(size=int(round(float(default_label_font.cget("size")) * 1.8)))
label = tk.Label(page1, text="Wybierz figurę", font=default_label_font)
label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
figures = ["Kwadrat", "Prostokąt", "Trójkąt", "Równoległobok", "Romb", "Trapez", "Koło"]
buttons_page1 = []
for figure in figures:
button = tk.Button(page1, text=figure, font=button_font, command=lambda f=figure: select_figure(f))
button.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
buttons_page1.append(button)
# Strona 2 Operacja
label = tk.Label(page2, text="Wybierz operację", font=default_label_font)
label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
operations = ["Pole", "Obwód"]
buttons_page2 = []
for operation in operations:
button = tk.Button(page2, text=operation, font=button_font, command=lambda o=operation: select_operation(o))
button.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
buttons_page2.append(button)
# Strona 3 Wartości
label = tk.Label(page3, text="Podaj wartości", font=default_label_font)
label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value_label = tk.Label(page3, text="Wartość 1:", font=default_font)
value_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
value_entry = tk.Entry(page3, font=default_font)
value_entry.pack(fill=tk.BOTH, expand=True)
value2_label = tk.Label(page3, text="Wartość 2:", font=default_font)
value3_label = tk.Label(page3, text="Wartość 3:", font=default_font)
value4_label = tk.Label(page3, text="Wartość 4:", font=default_font)
value2_entry = tk.Entry(page3, font=default_font)
value3_entry = tk.Entry(page3, font=default_font)
value4_entry = tk.Entry(page3, font=default_font)
result_button = tk.Button(page3, text="Oblicz", font=button_font, command=calculate_result)
result_button.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
result_label = tk.Label(page3, text="", font=default_font)
result_label.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
root.bind("<Escape>", go_back)
# Wyświetlanie strony 1
show_page(1)
# Uruchomienie aplikacji
root.mainloop()