Homepage von Papa

Projekt Taschenrechner

Das Fenster mit PySimpleGui

Werfen wir zunächst noch einmal einen Blick auf das Bild in Kapitel 2:

So soll unser Taschenrechner also aussehen.

Wir können 20 Schaltflächen (oder englisch "button") erkennen, 4 in jeder Reihe und 5 Reihen.

Darüber, sozusagen in der ersten Reihe, ist das Eingabefeld platziert. Hier werden die Zahlen und Rechenzeichen angezeigt.

In "PySimpleGui" werden die einzelnen Elemente im "layout" gebündelt. Damit wir uns der Materie sachte nähern, schauen wir uns die Umsetzung mal nur für die ersten beiden Zeilen an. Der Code lautet wie folgt:

import PySimpleGUI as sg

# die Elemente im Fenster werden im layout gebündelt:
layout = [[sg.Input(size=(17, 1), justification='right', key='eingabe',
                    font=('OCR A Extended', 16))],
          [sg.Button('+'), sg.Button('-'), sg.Button('*'), sg.Button('/')]
        ]

# das Fenster selber wird erzeugt
window = sg.Window('Taschenrechner', layout, default_button_element_size=(5,2),
                   auto_size_buttons=False)

# Programmschleife
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

Wenn Ihr das als Programm ausführen lasst, sollte der Rechner etwa so aussehen:

Gehen wir den Code durch. Zeile 1 importiert die Bibliothek. Voraussetzung für die Nutzung ist natürlich, dass Ihr sie installiert habt. Falls das noch nicht geschehen ist, findet Ihr in Kapitel 3 eine Anleitung.

Zeile 4 bis Zeile 7 ist das oben angekündigte "layout". Das schauen wir uns gleich näher an.

In Zeile 10 wird das Fenster selber instanziiert. Der erste Parameter in der Funktion ist der Name, der oben links angezeigt wird ("Taschenrechner"). Parameter 2 ist der Verweis auf das "layout", in unserem Fall haben wir es auch genau so benannt, nämlich "layout". Der an dritter Stelle stehende Parameter "default_button_element_size=(5,2)" gibt an, dass alle Button (ich nehme jetzt mal die denglische Form der Schaltfläche) gleich groß sein sollen. Der Wert "auto_size_buttons=False" besagt, dass sich die Button nicht nach der Anzahl der Stallen richten soll, sondern, dass die Größe fix bleibt. Setzt den Parameter auch gerne mal auf "True", dann seht Ihr den Unterschied.

Ab Zeile 14 ist die Programmschleife codiert. In Zeile 15 wird das Ereignis innerhalb des Fensters (das "event", also z.B. das Klicken auf einen Button) abgefragt, aber auch der Wert oder Zustand des Objekts ("value"), also bei gedrücktem "+"-Button das "+" selbst.

Besonders wird der Klick auf das "X" in der rechten oberen Ecke des Fensters geachtet, das schließt das Programm, indem die Schleife mit "break" verlassen wird.

Wenn Ihr jetzt etwas über die Tatstatur eingebt, seht Ihr die Zeichen in der Anzeige.

Damit ist natürlich noch keine Berechnung möglich, dazu kommen wir aber später.

Schauen wir jetzt genauer auf die Zeilen 4 bis 7, also das "layout".

Wir haben zwei ineinander verschachtelte Listen. Das layout selbst sieht so aus:

layout = []

Es erstreckt sich über 3 Zeilen. Innerhalb von layout gibt es nun eine Liste für die erste Zeile…

[sg.Input(size=(17, 1), …, font=('OCR A Extended', 16))]

…und eine Liste für die zweite Zeile, in der die Button enthalten sind:

[sg.Button('+'), sg.Button('-'), sg.Button('*'), sg.Button('/')]

Um alle relevanten Button für den Taschenrechner zu implementieren, müsste die Erweiterung dem folgenden Bild entsprechend gemacht werden:

Ich habe da mal was vorbereitet…

import PySimpleGUI as sg

# die Elemente im Fenster werden im layout gebündelt:
layout = [[sg.Input(size=(17, 1), justification='right', key='eingabe',
                    font=('OCR A Extended', 16))],
          [sg.Button('+'), sg.Button('-'), sg.Button('*'), sg.Button('/')]
        ]

# das Fenster selber wird erzeugt
window = sg.Window('Taschenrechner', layout, default_button_element_size=(5,2),
                   auto_size_buttons=False)

# Programmschleife
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break

Achtet bitte darauf, dass Zeilen 10 und 11 eigentlich zusammengehören, ich habe der besseren Lesbarkeit halber einen Zeilenumbruch eingefügt.

Die Anweisungen "button_color=("black","orange")" in den Zeilen 10 und 11 geben dem Ruhezustand des Button die Farbe "orange" mit, sobald er angeklickt wird, ändert sich die Farge auf "Schwarz". Spielt hier auch gerne mal mit unterschiedlichen Farben herum.

Wenn Ihr das jetzt laufen lasst, sollte das dann so aussehen:

Hübsch, oder?

Für die Codierung der Button nehmen wir uns mal wieder ein neues Unterkapitel vor.

  • Zurück
  • Weiter

Inhaltsverzeichnis:

1. Vorwort
2. Das Projekt
3. Vorarbeiten
4. Projekt Snake
4.1. Der Funktionsumfang
4.2. Die Planung der Umsetzung
4.3. Das Coden
4.3.1. Datentypen in Python
4.3.2. Eingabe von Zahlen
4.3.3. Rechnen mit der Funktion eval()
4.3.4. Das Fenster mit PySimpleGui
4.3.5. Die Button
5. Abschluss

© by Papa. Die Seite ist online seit 2020.

Menu

  • Startseite
  • Projekte
    • Übersicht aller Projekte
    • Nachbau Snake
    • Taschenrechner
  • Helferlein
    • Übersicht Hilfprogramme
    • Fonts in pygame
    • Quellcode nach HTML
    • Text nach HTML
  • Impressum
  • Disclaimer

Modal content goes here