|
|
|
|
|
|
|
|
|
|
|
|
|
|
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=u"Viel Spa\xdf mit dem Tkinter-Tutorial") 4 lab.pack() 5 root.mainloop()
Erklärung:
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()
root hinein gehört, und welcher Text als Label (=Beschriftung) ausgegeben werden soll.text=u"Viel Spa\xdf mit dem Tkinter-Tutorial"| Zeichen | in Unicode |
|---|---|
| ä | \xe4 |
| ö | \xf6 |
| ü | \xfc |
| Ä | \xc4 |
| Ö | \xd6 |
| Ü | \xdc |
| ß | \xdf |
| € | \u20ac |
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:
antwort definiert, aber wo wird sie aufgerufen?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 . . .)