Zum Inhalt

Taschenrechner

P2, Taschenrechner

Dieser Code implementiert einen einfachen Taschenrechner mit einer grafischen Benutzeroberfläche (GUI) unter Verwendung von Python's tkinter-Bibliothek und einem Flask-Server für die Berechnungen. Hier ist eine Schritt-für-Schritt-Erklärung des Codes:

Code
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/div', methods=['GET'])
def div():
    try:
        zahl1 = float(request.args.get('zahl1'))
        zahl2 = float(request.args.get('zahl2'))
        if zahl2 == 0:
            return jsonify({'error': 'Division by zero'}), 400
        result = zahl1 / zahl2
        return jsonify({'result': result})
    except (TypeError, ValueError):
        return jsonify({'error': 'Invalid input'}), 400

@app.route('/add', methods=['GET'])
def add():
    try:
        zahl1 = float(request.args.get('zahl1'))
        zahl2 = float(request.args.get('zahl2'))
        result = zahl1 + zahl2
        return jsonify({'result': result})
    except (TypeError, ValueError):
        return jsonify({'error': 'Invalid input'}), 400

@app.route('/sub', methods=['GET'])
def sub():
    try:
        zahl1 = float(request.args.get('zahl1'))
        zahl2 = float(request.args.get('zahl2'))
        result = zahl1 - zahl2
        return jsonify({'result': result})
    except (TypeError, ValueError):
        return jsonify({'error': 'Invalid input'}), 400

@app.route('/mul', methods=['GET'])
def mul():
    try:
        zahl1 = float(request.args.get('zahl1'))
        zahl2 = float(request.args.get('zahl2'))
        result = zahl1 * zahl2
        return jsonify({'result': result})
    except (TypeError, ValueError):
        return jsonify({'error': 'Invalid input'}), 400


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

1. Import-Befehle

Import-Befehle
    import tkinter as tk
    import requests
  • `tkinter` ist eine Standardbibliothek für die GUI-Erstellung in Python.
  • requests wird verwendet, um HTTP-Anfragen an den Flask-Server zu senden.

2. Flask-Server-URL

Code
    BASE_URL = 'http://192.168.178.36:5000'

Hier wird die Basis-URL für den Flask-Server definiert, der die Berechnungen durchführt. Diese URL wird verwendet, um die verschiedenen Operationen zu erreichen.

3. GUI Setup

Code
    root = tk.Tk()
    root.title("Einfacher Taschenrechner")
  • Erstellt ein Hauptfenster für die GUI und setzt den Titel auf "Einfacher Taschenrechner".

4. Eingabefelder

tk.Label(root, text="Erste Zahl:").grid(row=0, column=0)
entry_1 = tk.Entry(root)
entry_1.grid(row=0, column=1)

tk.Label(root, text="Zweite Zahl:").grid(row=1, column=0)
entry_2 = tk.Entry(root)
entry_2.grid(row=1, column=1)
Erklärung

Erstellt zwei Beschriftungen (Label) und zwei Eingabefelder (Entry) für die Eingabe der beiden Zahlen. Die grid Methode wird verwendet, um diese Elemente in einem Rastersystem zu platzieren.

5. Ergebnis Label

Ergebnis Label

label_result = tk.Label(root, text="Ergebnis: ")
label_result.grid(row=2, column=0, columnspan=2)
  • Erstellt ein Label, das das Ergebnis der Berechnung anzeigt, und positioniert es in der GUI.

6. Berechnungsfunktion

Code
def get_result(operation):
zahl1 = entry_1.get()
zahl2 = entry_2.get()
try:
    zahl1 = float(zahl1)
    zahl2 = float(zahl2)
    if operation == 'add':
        url = f'{BASE_URL}/add'
    elif operation == 'sub':
        url = f'{BASE_URL}/sub'
    elif operation == 'mul':
        url = f'{BASE_URL}/mul'
    elif operation == 'div':
        url = f'{BASE_URL}/div'
    else:
        label_result.config(text="Fehler: Ungültige Operation")
        return

    response = requests.get(url, params={'zahl1': zahl1, 'zahl2': zahl2})

    if response.status_code == 200:
        result = response.json().get('result')
        label_result.config(text=f"Ergebnis: {result}")
    else:
        label_result.config(text="Fehler: Server antwortet nicht")
except ValueError:
    label_result.config(text="Fehler: Bitte gültige Zahlen eingeben")
except ZeroDivisionError:
    label_result.config(text="Fehler: Division durch Null nicht möglich")
  • Diese Funktion `get_result` wird aufgerufen, wenn einer der Rechenoperationen-Buttons gedrückt wird.
  • Die Eingaben werden aus den Eingabefeldern gelesen und in `float` konvertiert.
  • Je nach übergebener Operation (`add, sub, mul, div`) wird die entsprechende URL für den GET-Request an den Server gebildet.
  • Der GET-Request wird an den Server gesendet, und das Ergebnis wird angezeigt. Bei Fehlern (z.B. ungültige Zahlen oder Division durch Null) wird eine entsprechende Fehlermeldung angezeigt.

7. Rechnungoperation-Buttons

tk.Button(root, text="+", command=lambda: get_result('add')).grid(row=3, column=0)
tk.Button(root, text="-", command=lambda: get_result('sub')).grid(row=3, column=1)
tk.Button(root, text="*", command=lambda: get_result('mul')).grid(row=3, column=2)
tk.Button(root, text="/", command=lambda: get_result('div')).grid(row=3, column=3)
  • Vier Buttons werden erstellt, einer für jede Rechenoperation (`+, -, *, /`).
  • Jeder Button ist mit der `get_result`-Funktion verbunden, die beim Klicken aufgerufen wird, um die entsprechende Operation auszuführen.
  • 8. Haupt-Loop

    Code
    root.mainloop()
    
  • Startet die GUI-Anwendung und hält das Fenster offen, bis es vom Benutzer geschlossen wird.
  • Zusammenfassung

    Zusammengefasst stellt dieser Code eine einfache GUI-Anwendung bereit, die es dem Benutzer ermöglicht, zwei Zahlen einzugeben und eine Rechenoperation auszuwählen. Die Berechnung wird von einem Flask-Server durchgeführt, und das Ergebnis wird in der GUI angezeigt.