Home

Pythagoras-Taschenrechner mit Tkinter und Place()

pack() oder grid() konstruiert ist, sondern mit place() – mit expliziten X- und Y-Werten.

Mittlerweile kritisiert: Die feste Positionierung mit place() ist nicht skalierbar für große Monitore (z. B. 4K oder 34-Zoll-Displays).
Ja und nein: Für einen „Mann vom Mond“ (also kleinere Bildschirme) ist es noch lesbar – aber auf großen Bildschirmen passt es nicht überall.
Empfehlung: Für moderne Anwendungen sollte man eher grid() oder responsive Design nutzen – aber hier wird das place()-Beispiel gezeigt, um das Layoutprinzip zu verstehen.

Python-Beispiel: Pythagoras-Taschenrechner mit Tkinter und 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()
    
Wichtige Hinweise: