Erklären wir die Gleichung im Titel: GUI bedeutet graphical user interface, zu deutsch sind das die vielen Fenster, Buttons und Menüs, die einem heute begegnen. Will man so etwas in Python schreiben, benötigt man eine Fenster-Bibliothek, genau das leistet Tkinter! Tkinter bedeutet Tk interface, also eine Schnittstelle zu Tk, und Tk ist eine einfache Fensterbibliothek geschrieben in Tcl (eine Programmiersprache, Tcl steht für Tool command language, Tk für Tool kit). Hier ein Beispiel (in Python):
Die grafischen Elemente wie Buttons und Menüs haben einen Namen: Widget (=Window Gadget). Ein Widget hat normalerweise bestimmte Eigenschaften, im Beispiel oben etwa die Hintergrundfarbe
und bestimmte Methoden, das sind Befehle, die die Widgets "verstehen". Ein
sehr wichtiger Befehl ist beispielsweise pack
, mit diesem Befehl wird der
Text überhaupt erst angezeigt!
Das Label-Widget dient zur Beschriftung, das folgende Python-Programm erzeugt ein Label:
1 from Tkinter import *
2 root=Tk()
3 lab=Label(root,text="Viel Spass mit dem Tkinter-Tutorial")
4 lab.pack()
5 root.mainloop()
Erklärung:
Zeile 2 sieht so ähnlich aus wie eine Zuweisung: Hier sagen wir Python, dass wir gerne eine Fenster-Anwendung mit Namen root
hätten. Die Methode Tk()
gibt uns dann freundlicherweise dieses Fenster zurück. Probiere in Python die folgenden beiden Zeilen aus:
from Tkinter import *
root=Tk()
In Zeile 3 erzeugen wir unser Label, wir sagen Python, dass das Label ins Fenster root
hinein gehört, und welcher Text als Label (=Beschriftung) ausgegeben werden soll.
pack
sorgt dafür, dass unser Text auch angezeigt wird. Überzeuge dich davon, indem du Zeile 3 & 4 in Python eingibst.mainloop
in root.mainloop()
(Zeile 5) steht für eine Endlosschleife (!), unser Tkinter-Skript wartet dann auf so interessante Ereignisse wie einen Maus-Klick oder eine Maus-Bewegung. Buttons sind zum Klicken da, in Tkinter geht das so:
1 from Tkinter import *
2 root=Tk()
3 but=Button(root,text="Wo ist Tommy?")
4 but.pack()
5 root.mainloop()
Wirkung:
Erklärung:
Überlegen wir: jedes Mal, wenn auf den Button geklickt wird, soll etwas
passieren, sonst natürlich nicht. Wir müssen also den Klick mit etwas
verbinden, beispielsweise mit einer Ausgabe, für die Ausgabe haben wir Labels,
also verbinden wir unseren Button mit der Ausgabe eines Labels. Dafür gibt es
in Tkinter den command
-Parameter:
1 from Tkinter import *
2 def antwort():
3 lab=Label(root,text="Hier nicht!")
4 lab.pack()
5
6 root=Tk()
7 but=Button(root,text="Wo ist Tommy?", command=antwort)
8 but.pack()
9 root.mainloop()
Erklärung:
In Zeile 2-4 wird die Funktion antwort
definiert, aber wo wird sie aufgerufen? ____________________________________________
Die einzige Änderung ist in Zeile 7: in der Button-Vereinbarung wurde ein Parameter hinzugefügt: command
, das macht man so ähnlich auch in HTML (klar?)
Jetzt drücken wir mehrmals auf den Button, aber überzeugend, na ja, für den Anfang . . .
Was wir brauchen, sind natürlich Messsage-Boxen:
Und wie geht das in Python? Einfach ein Zweizeiler:
1 import tkMessageBox
2 tkMessageBox.showinfo('Hier nicht!','Hier auch nicht!')
Erklärung:
tkMessageBox
, dieses Modul enthält die ganzen Dialog-Boxen.showinfo
. Frage: Warum müssen wir showinfo zwei Parameter übergeben? ______________________________________________________________________
______________________________________________________________________
Welche Message-Boxen ausser showinfo
gibt es noch? Hier eine kleine
Übersicht:
showwarning()
showerror()
askyesno()
askokcancel()
askretrycancel()
Der Aufruf geht fast genauso wie bei showinfo
, einfach ausprobieren, wir
aber kommen zum Programm des Tages:
1 from Tkinter import *
2 import tkMessageBox
3 def antwort():
4 tkMessageBox.showinfo('Hier nicht!','Hier auch nicht!')
5
6 root=Tk()
7 but=Button(root,text="Wo ist Tommy?",command=antwort)
8 but.pack()
9 root.mainloop()
background="blue"
oder foreground="magenta"
text="Wo ist Tommy?"
durch Bilder: bitmap="questhead"
. Statt questhead
darfst du auch schreiben: error, gray75, gray50, gray25, gray12, hourglass, info, question
oder warning
. (gray
sieht etwas komisch aus . . .) → sp, 2016-12-02