grid() konstruiert ist, sondern mit place() – mit expliziten X- und Y-Werten.
place() ist nicht skalierbar für große Monitore (z. B. 4K oder 34-Zoll-Displays).grid() oder responsive Design nutzen – aber hier wird das place()-Beispiel gezeigt, um das Layoutprinzip zu verstehen.
place()Das folgende Python-Programm implementiert einen Taschenrechner, der die Pythagoras-Regel (a2 + b2 = c2) überprüft und berechnet.
# pythagoras_calculator_tkinter.py
# Pythagoras-Taschenrechner mit Tkinter und place()
# Alle Controls mit expliziten x, y-Werten positioniert
import tkinter as tk
from tkinter import messagebox
import pythagoras # Das bestehende Modul mit Fehlerbehandlung
# === Hauptfenster ===
class PythagorasCalculatorApp:
def __init__(self, root):
self.root = root
self.root.title("Pythagoras-Taschenrechner")
self.root.geometry("500x400")
self.root.resizable(False, False) # Fenster nicht vergrößern
# === Layout mit place() ===
self.create_widgets()
def create_widgets(self):
# Titel
self.title_label = tk.Label(
self.root,
text="Pythagoras-Taschenrechner",
font=("Arial", 16, "bold"),
fg="blue"
)
self.title_label.place(x=100, y=10)
# Eingabefelder
self.label_a = tk.Label(self.root, text="a (Länge):", font=("Arial", 10))
self.label_a.place(x=20, y=50)
self.entry_a = tk.Entry(self.root, width=10, font=("Arial", 12))
self.entry_a.place(x=100, y=50)
self.label_b = tk.Label(self.root, text="b (Länge):", font=("Arial", 10))
self.label_b.place(x=20, y=85)
self.entry_b = tk.Entry(self.root, width=10, font=("Arial", 12))
self.entry_b.place(x=100, y=85)
self.label_c = tk.Label(self.root, text="c (Hypotenuse):", font=("Arial", 10))
self.label_c.place(x=20, y=120)
self.entry_c = tk.Entry(self.root, width=10, font=("Arial", 12))
self.entry_c.place(x=100, y=120)
# Buttons
self.btn_aufstellen = tk.Button(
self.root,
text="a2 + b2 = ?",
font=("Arial", 10),
bg="lightblue",
command=self.calculate_sum_of_squares
)
self.btn_aufstellen.place(x=20, y=155)
self.btn_kontrolliere = tk.Button(
self.root,
text="a2 + b2 == c2?",
font=("Arial", 10),
bg="lightgreen",
command=self.check_pythagoras
)
self.btn_kontrolliere.place(x=130, y=155)
self.btn_wurzel = tk.Button(
self.root,
text="√(a2 + b2) = ?",
font=("Arial", 10),
bg="lightyellow",
command=self.calculate_hypotenuse
)
self.btn_wurzel.place(x=250, y=155)
# Ergebnis-Feld
self.result_label = tk.Label(
self.root,
text="Ergebnis: ",
font=("Arial", 12),
fg="darkblue"
)
self.result_label.place(x=20, y=190)
# Historie-Feld (für Ausgabe)
self.history_label = tk.Label(
self.root,
text="Historie: ",
font=("Arial", 10),
fg="gray"
)
self.history_label.place(x=20, y=230)
# Info-Text
self.info_label = tk.Label(
self.root,
text="Geben Sie positive Zahlen ein. Negative Werte führen zu Fehler!",
font=("Arial", 9),
fg="red"
)
self.info_label.place(x=20, y=350)
# Initialisierung
self.history = []
def calculate_sum_of_squares(self):
try:
a = float(self.entry_a.get())
b = float(self.entry_b.get())
result = pythagoras.aufstellen(a, b)
self.update_result(f"a2 + b2 = {a}2 + {b}2 = {result}")
self.history.append(f"a2 + b² = {a}2 + {b}2 = {result}")
except ValueError:
messagebox.showerror("Fehler", "Bitte geben Sie gültige Zahlen ein!")
def check_pythagoras(self):
try:
a = float(self.entry_a.get())
b = float(self.entry_b.get())
c = float(self.entry_c.get())
is_valid = pythagoras.kontrolliere(a, b, c)
result_text = f"{a}2 + {b}2 = {c}2 → {'Ja' if is_valid else 'Nein'}"
self.update_result(result_text)
self.history.append(result_text)
except ValueError:
messagebox.showerror("Fehler", "Bitte geben Sie gültige Zahlen ein!")
except Exception as e:
messagebox.showerror("Fehler", str(e))
def calculate_hypotenuse(self):
try:
a = float(self.entry_a.get())
b = float(self.entry_b.get())
hyp = pythagoras.wurzel(a, b)
result_text = f"√({a}2 + {b}2) = {hyp:.2f}"
self.update_result(result_text)
self.history.append(result_text)
except ValueError:
messagebox.showerror("Fehler", "Bitte geben Sie gültige Zahlen ein!")
def update_result(self, text):
self.result_label.config(text=f"Ergebnis: {text}")
# Historie im Fenster anzeigen
self.history_label.config(text=f"Historie: {', '.join(self.history)}")
# === Start-Programm ===
if __name__ == "__main__":
root = tk.Tk()
app = PythagorasCalculatorApp(root)
root.mainloop()
pythagoras muss bereits existieren und die Funktionen aufstellen(), kontrolliere() und wurzel() implementieren.place(x=..., y=...) ist keine skalierbare Lösung für große Bildschirme.