======Einstieg in Tkinter======
Grafische Oberflächen bestehen aus sogenannten Widgets, die meist mit der Maus bedient werden und damit eine Aktion auslösen. Widgets können sein: Buttons, ein- und mehrzeilige Eingabefelder, Labels, List- und Comboboxen ... Das Programm läuft in einer "Endlosschleife" und wartet auf Nutzereingaben mit Maus und Tastatur, mit den Aktionen ausgelöst werden, u.a. auch das Beenden des Programms.
=====Ein erstes Beispiel=====
# Tkinter wird importiert
import tkinter
# Funktion zum beenden des Programms.
def ende():
main.destroy()
# Das Hauptfenster wird erzeugt.
main = tkinter.Tk()
# Ein Button wird erzeugt.
# Dem Button wird die Funktion ende() zugeordnet.
b = tkinter.Button(main, text = "Beenden", command = ende)
# Der Button wird zum Hauptfenster hinzugefügt.
b.pack()
# Die Hauptschleife wird gestartet.
main.mainloop()
* Mit ''%%import tkinter%%'' wird die Tkinter-Bibliothek importiert.
* Die Funktion ''%%ende()%%'' beendet die Hauptschleife des Programms und zerstört das Tk-Objekt.
* Mit ''%%main = tkinter.Tk()%%'' wird ein Objekt der Klasse Tk erzeugt. Es repräsentiert das Hauptfenster des Programms.
* Mit ''%%b = tkinter.Button(main, text = "Beenden", command = ende)%%'' wird ein Objekt vom Typ Button (ein Widget) erzeugt. Das Elternobjekt ist ''%%main%%'', also das Hauptfenster. Die Aufschrift des Buttons (Eigenschaft ''%%text%%'') ist "Beenden". Dem Button ist die Funktion ende() zugeordnet (''%%command=ende%%''), d.h. wenn der Button mit der Maus gedrückt wird (Hauptaktion des Buttons), wird die Funktion Ende aufegrufen und das Programm beendet.
* Mit ''%%b.pack()%%'' wird der Button zum Hauptfenster hinzugefügt.
* Mit ''%%main.mainloop()%%'' wird das Hauptfenster des Programms erzeugt und die Hauptschleife gestartet. Das Programm wartet jetzt auf Maus- und Tastaturaktionen, bis es beendet wird.
Das Programmfenster sieht eher unspektakulär aus:
{{ :python:tkinter:einstieg.png?nolink |}}
**Aufgabe 1**
Teste das Programm! Verändere die Aufschrift des Buttons!
=====Weitere einfache Widgets=====
Bisher haben wir das Widget **Button** kennengelernt. Durch einen Mausklick auf einen Button können wir bestimmte Aktionen ausführen. Damit wir einfache Programme schreiben können lernen wir in diesem Abschnitt noch weitere Widgets kennen. **Labels** sind Beschriftungsflächen in einem Programm. Sie können Text und Bilder enthalten. **Entries** sind einzeilige Eingabefelder, auf deren Inhalt mit der Methode ''%%get()%%'' zugegriffen werden kann. Im Programm werden einige Eigenschaften dieser Widgets verändert. Diese Eigenschaften sind in einen [[https://www.w3schools.com/python/python_dictionaries.asp | Dictionary]] implementiert und man kann mit Hilfe des Schlüssels (Name der Eigenschaft) darauf zugreifen.
Bei den einzelnen Widgets sind das jeweils die folgenden Eigenschaften:
[[https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/button.html | Button]] : command, text
[[https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/entry.html | Entry]]: width, text
[[https://anzeljg.github.io/rin2/book2/2405/docs/tkinter/label.html | Label]]: font, anchor, text
Über die Links gelangt man zu einer Übersicht aller Eigenschaften der Widgets.
Bisher fügen wir unsere Widgets mit der Methode ''%%pack()%%' zum Hauptfenster hinzu. Im nächsten Abschnitt werden wir bessere Möglichkeiten zum Anordnen der Widgets kennenlernen.
Im folgenden Programm wird über die Kommentare beschrieben, wie die Widgets eingesetzt werden.
# Tkinter wird importiert
import tkinter
# Funktion zum Beenden der Hauptschleife
def ende():
main.destroy()
# Funktion zum Berechnen des Ergebnisses
def ausrechnen():
# Die Zeichenkette aus dem Eingabefeld wird in der Variable eingabe abgespeichert
eingabe = eEingabe.get()
# Es wird versucht die Zeichenkette in eine Kommazahl umzuwandeln.
try:
zahl = float(eingabe)
# Wenn das Umwandeln erfolgreich ist wird die Texteigenschaft des Ergenislabels geändert:
# Es wird die Quadratzahl berechnet und das Ergebnis wird als Zeichenkette angehängt
lErgebnis["text"] = "Ergebnis: "+str(zahl * zahl)
except:
# Wenn die Eingabe keine Zahl war, wird die Eigenschaft text des Ergebnislabels geändert:
# Ausgabe: Bitte eine Zahl eingeben!
lErgebnis["text"] = "Bitte eine Zahl eingeben!"
# Das Hauptfenster wird erzeugt
main = tkinter.Tk()
# Ein Label für die Überschrift mit dem Text Quadratzahlen wird erzeugt
lUeberschrift = tkinter.Label(main, text = "Quadratzahlen")
# Die Schriftart des Labels wird geändert
lUeberschrift["font"] = "Sans 16 bold"
# Die Überschrift wird zum Hauptfenster hinzugefügt
lUeberschrift.pack()
# Ein Eingabefeld wird erzeugt.
eEingabe = tkinter.Entry(main)
# Das Eingabefeld wird zum Hauptfenster hinzugefügt.
eEingabe.pack()
# Ein Label für das Ergebnis wird erzeugt.
lErgebnis = tkinter.Label(main, text = "Ergebnis: ")
# Die Labelbreite wird auf 20 Zeichen gesetzt
lErgebnis["width"] = 20
# Der Labeltext wird links ausgerichtet.
lErgebnis["anchor"] = "w"
# Das label wird zum Hauptfenster hinzugefügt.
lErgebnis.pack()
# Ein Button zum Ausrechnen mit der Aufschrift "Ausrechnen" wird erzeugt
# und mit der Funktion ausrechnen() verknüpft.
bAusrechnen = tkinter.Button(main, text = "Ausrechnen", command = ausrechnen)
# Der Button wird zum Hauptfenster hinzugefügt.
bAusrechnen.pack()
# Ein Button zum Beenden mit der Aufschrift "Beenden" wird erzeugt
# und mit der Funktion ende() verknüpft.
bEnde = tkinter.Button(main, text = "Beenden", command = ende)
# Der Button wird zum Hauptfenster hinzugefügt.
bEnde.pack()
# Die Hauptschleife wird gestartet.
main.mainloop()
{{ :python:tkinter:einfache_widgets.png?nolink |}}
**Aufgabe 2**
Teste das Programm. Verändere die Eigenschaften der Widgets! Überlege dir neue Möglichkeiten der Berechnung (z.B. die Wurzel einer Zahl)!
**Aufgabe 3**
Schreibe ein Tkinter-Programm für einen einfachen Taschenrechner!
{{ :python:tkinter:aufgabe3.png?nolink |}}