Tkinter
Ralf Muschall
Überblick
Inhalt
- Widget-Sets
- Hello World
- Erläuterung zu "Hello World"
- Widgets
- Widget Constructor Parameters
- Geometrie-Manager
- Eigene Widgets
- Canvas-Items
- Literatur
Widget-Sets
Tk/Gtk/Qt
- Tk
- alt, einfach, einfach in alles einbindbar
- Gtk
- GPL, C, einfach in alle Sprachen einbindbar
- Qt
- z.T. GPL(?), C++, Einbindung schwerer ⇒ nur
in verbreitetste Sprachen eingebunden, z.B. nicht
in Ocaml, soll leichter programmierbar sein als Gtk
- wx
- Kenne ich nicht ☺
Hello World
import Tkinter,sys
class Hello(object):
def __init__(self,parent):
'''
Hello Button
'''
self.b=Tkinter.Button(parent,
command=sys.exit,
text='Hello world')
self.b.pack()
if __name__=='__main__':
root=Tkinter.Tk()
h=Hello(root)
root.mainloop()
Erläuterung zu "Hello World"
b=Tkinter.Button(args): erzeuge Objekt
b.pack(): mache Objekt sichtbar (nur, falls
parent
schon sichtbar ist)
root=Tkinter.Tk(): erzeuge sichtbares Toplevel-Window
root.mainloop(): Starte Tk-Eventloop
Widgets Teil 1
Einfachste Widgets
- Frame
- Flächenaufteilung
- Label
- passive Text- oder Bildflächen
- Button
- Entry
- einzeilige Texteingabe
- Radiobutton
- Auswahl 1 aus n
- Checkbutton
- 0...n aus n
Widgets Teil 2
Mehr einfache Widgets
- Scale
- Einstellen eines Gleitkommawertes
- Scrollbar
- Steuerung von Canvas oder Listbox (und nur diese!),
kompliziert. Erlaubt indirekt Scrollen von allem
durch Einbetten anderer Widgets ins Canvas
- Text
- Editierfeld
- Tk
- Erstes Toplevel
- Toplevel
- Weitere Toplevel
Widgets Teil 3
kompliziertere Widgets
- Canvas
- Vektorgraphik, scrollfähig, kann andere Widgets enthalten
- Menu
- Drop-Down-Menü
- Listbox
- Anzeigen vieler Textzeilen, scrollfähig
- Menubutton
- "Kopf" eines Menüs (Menü selbst wird als
Constructorargument übergeben, muss schon existieren)
Widget Constructor Parameters
Nur sinngemäß anwendbar
(erstes Argument)
parent, d.h. normalerweise umgebendes Widget
command
Aktion bei Linksclick und Loslassen
text
Anzeigetext (vom Programm vorgegeben, zur Laufzeit
mit configure änderbar)
color, background, width, height
selbsterklärend
Geometrie-Manager 1
pack 1
- side=Tkinter.LEFT
- Reserviere Gebiet für neues Widget möglichst
weit links im Parent
- fill=Tkinter.X
- Widget soll das für es reservierte Gebiet ausfüllen
Das heißt nicht, dass das Parent mehr ausgefüllt
wird, sondern nur, dass das Widget sich auf allen
ungenutzten Platz im reservierten Gebiet
ausdehnt
Geometrie-Manager 2
pack 2
- expand=True
- Reserviertes Gebiet wird (bei mehreren gerecht)
maximiert, Widget wird nicht größer (falls
nicht fill gesetzt wurde)
- padx, pady
- External padding: Mache reserviertes Gebiet um
angegebene Größe größer als benötigt
- ipadx, ipady
- Internal padding: Mache reserviertes Gebiet um
angegebene Größe größer als benötigt und
vergrößere Widget um denselben Betrag
- anchor
- Position im reservierten Gebiet
Geometrie-Manager 3
grid 1
- column=Zahl
- Welche Spalte
- row=Zahl
- Welche Zeile
Nur belegte Spalten und Zeilen existieren
Geometrie-Manager 4
grid 2
Eigene "Widgets"
Zusammengesetzt aus mehreren
class LabeledEntry:
def __init__(self, parent, ...)
self.l=Tkinter.Label(parent, ...)
self.e=Tkinter.Entry(parent, ...)
self.l.pack(side=Tkinter.LEFT)
self.e.pack(side=Tkinter.LEFT)
Vorausgesetzt, dass parent geeignet
ist (z.B. Frame, jemand kümmert sich um pack())
Canvas-Items
Vektorgraphik
c=Tkinter.Canvas(...)
c.create_arc(xmin=100,ymin=200,xmax=150,ymax=250,...)
Andere Widgets
f=Tkinter.Frame(c)
Zweck:
f wird mit den eventuell an
c befestigten Scrollbars mitgescrollt.
Literatur
- Ousterhout: Tcl and the Tk Toolkit, AW 1994
- Shipman: Tkinter reference: A GUI for Python
http://infohost.nmt.edu/tcc/help/pubs/tkinter/
- Lundh: An Introduction to Tkinter, 1999
http://www.pythonware.com/library/tkinter/introduction/