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.