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¶
- `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¶
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¶
- 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
- 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)
8. Haupt-Loop¶
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.