Python-Programmierung: Tkinter
Aus Wikibooks
Tkinter
Inhaltsverzeichnis |
[Bearbeiten] Einführung
Um Tkinter in Python zu verwenden, muss man erst das entsprechende Modul importieren.
from Tkinter import *
Mit diesem import-Befehl importiert man das gesamte Tkinter-Modul. Üblicherweise schreibt man zuerst ein "Hello World"-Programm:
from Tkinter import * main_window=Tk() label=Label(main_window,text="Hello World") label.pack() main_window.mainloop()
In Zeile 1 wird, wie oben beschrieben, das Tkinter-Modul importiert. In Zeile 2 wird der Variablen 'main window' eine Instanz auf ein Tkinter-Fenster zugewiesen. In Zeile 3 wird der Variablen 'label' eine Instanz auf ein Label zugewiesen. Der erste Parameter ist das Fenster, wo es hinein soll. Alle anderen Parameter werden wie oben gezeigt benannt. Ein Label ist ein Widget, das einen Text oder ein Bild enthalten kann. Ein Widget kann jedes Teil einer GUI sein, wie ein Textfenster, eine Menüleiste etc. In Zeile 4 wird die Methode 'pack' aufgerufen. Sie sorgt dafür, dass das Label in das Fenster kommt. 'pack' ist ein Geometriemanager, das heißt, er legt die Geometrie innerhalb einer GUI fest. Mit'.pack(side=LEFT)' wird das entsprechende Widget links angeordnet.
main_window.geometry("150x250")
Eine einfache Methode um die Startgröße des Fensters zu bestimmen ist "geometry".
[Bearbeiten] Geometry Manager
In Tkinter muss ein Geometry Manager aufgerufen werden um ein Widget anzeigen zu lassen. Im obigen Beispiel wurde mit label.pack() der pack Geometry Manager aufgerufen. Er ist immer eine Methode. Die Geometry Manager sind:
[Bearbeiten] pack
Mit dem pack Geometry Manager wird ein Widget nach der Seite ausgerichtet.
widget.pack(side=LEFT)#links widget.pack(side=RIGHT)#rechts widget.pack(side=TOP)#oben widget.pack(side=BOTTOM)#unten
[Bearbeiten] place
Mit place kann man ein Widget an die genaue x/y Position ausrichten.
widget.place(x=3,y=3)
[Bearbeiten] grid
Mit dem grid Geometry Manager wird in row(Reihe) und column(Spalte), wie in einer Tabelle geordnet. Die Breite einer Spalte richtet sich nach dem größten Widget und die Höhe einer Reihe auch. Man muss aufpassen, dass man nicht zwei Widgets die gleiche Position zuweist, weil dann eins überschrieben wird, was bei pack kein Problem ist, da man ohne Probleme zwei Widgets side=TOP zuweisen kann und beide sind sichtbar.
from Tkinter import * root=Tk() label=Label(root,text="Label") label.grid(row=0,column=0) root.mainloop()
[Bearbeiten] Widgets
Widgets sind allgemein gesagt Teile einer GUI. Das bisher verwendete Label ist auch ein Widget. Weitere Widget sind zum Beispiel ein Button, ein Textfenster, eine Menüleiste und viele andere. In Tkinter ist der erste Parameter bei der Initialisierung eines Widgets das Fenster, in das es mal rein soll. Alle anderen Parameter sind meistens optional, allerdings ergibt ein Label, das nur dazu da ist Text anzuzeigen ohne text="..." wenig Sinn. In Tkinter sind alle Widgets Klassen.
[Bearbeiten] Label
Das Label Widget ist dazu da Text darzustellen. Mit dem Parameter text="..." kann man den Text definieren. Weitere Parameter sind zum Beispiel font="...", um die Schrift festzulegen.
from Tkinter import * root=Tk() label=Label(root,text="Hello World",font="Courier 12") label.pack() root.mainloop()
[Bearbeiten] Button
Das Button Widget wird benutzt, um auf Benutzerinteraktion zu reagieren. Ein Button reagiert, wenn man darauf klickt. Mit dem Parameter command=function wird festgelegt, was beim Daraufklicken passiert. Beispiel:
from Tkinter import * root=Tk() def press(): print "pressed" button=Button(root,text="Klicken",command=press) button.pack() root.mainloop()
Das Beispiel zeigt ein Fenster mit einem Button, das auf der Kommandozeile pressed ausgibt, wenn man darauf klickt. Durch command=press wird festgelegt, was passieren soll, wenn man darauf klickt. Wenn man bei einem Button eine Funktion mit Parameter aufrufen will, muss man dafür eine lambda Funktion benutzen.
from Tkinter import * root=Tk() def press(string): print string button=Button(root,text="press",command=lambda:press("Hallo")) button.pack() root.mainloop()
[Bearbeiten] Entry
Das Entry ist ein Eingabefeld. Die Entry-Eingabe kann mit "get" abgefragt werden. Mit "insert" kann man etwas in das Entry einfügen. Dabei kann man bestimmen, an welcher Stelle dies eingefügt werden. Mit "delete" kann man wiederum den Entry-Text löschen. Dabei kann man auch wie bei "insert" die zu löschende Stelle bestimmen.
from Tkinter import * root = Tk() ent1 = Entry(root) # Das Entry ent1.pack() root.mainloop()
Das einfachste Beispiel.
from Tkinter import * def co1(): ent1get = ent1.get() # Nach dem Drücken des Button wird der eingegebene Text abgefragt print ent1get # Hier wird der Entry-Text "geschrieben" root = Tk() ent1 = Entry(root) # Das Entry ent1.pack() but1 = Button(root) # Der Button but1["text"] = "print" but1["command"] = co1 # Der Button Kommando but1.pack() root.mainloop()
Mit insert kann man ein Text ins Entry einfügen. Mit END wird die Eingabe ins Ende eingefügt. Hier ein Beispiel.
from Tkinter import * root = Tk() ent1 = Entry(root) # Das Entry ent1.insert(END,"test") # Hier wird der Text ("test") bis zum Ende (END) eingefügt ent1.pack() root.mainloop()
Mit delete kann eine Entry-Eingabe gelöscht werden. Dabei muss, wie bei insert auch, bestimmt werden, was gelöscht wird. Im Beispiel sieht man 0,END, was bedeutet: von der 0ten Stelle bis zum Ende.
from Tkinter import * def co1(): ent1.delete(0,END) # Mit delete wird die Entry-Eingabe gelöscht. 0,END bedeutet: von der 0ten Stelle bis zum Ende root = Tk() ent1 = Entry(root) # Das Entry ent1.pack() but1 = Button(root) # Das Button but1["text"] = "löschen" but1["command"] = co1 # Der Befehl but1.pack() root.mainloop()