Übersicht:

  Textfenster (Methoden des Text-Widgets)
  Eingabezeilen (Entry)
  Exkurs: Unicode
  root.mainloop
  Aufgaben
  Tkinter-Startseite

Textfenster (Text)

Textfenster stellen in Tkinter die Funktionen eines Texteditors zur Verfügung: Man kann Zeilen markieren, kopieren, löschen, einfügen oder nach Worten bzw. Zeichenfolgen suchen. Ein Beispiel:


from Tkinter import *            ## Tkinter importieren
root=Tk()                        ## Wurzelfenster!
textfenster = Text(root)         ## Ein Textfenster erzeugen
textfenster.pack()               ## und anzeigen

Ergebnis:

Text-Widget

Beim Aufruf der Methode Text() können wahlweise jede Menge Argumente übergeben werden, diese Eigenschaften verändern das Aussehen des Textfensters (Tkinter arbeitet mit sinnvollen Voreinstellungen!):

Was fehlt, ist der Titel: Der Titel ist aber keine Eigenschaft des Textfensters, sondern des Toplevel-Widgets (anschaulich: die "Mutter" aller Widgets), Beispiel:


root = Tk()                             ## Toplevel-Widget
root.title('Chatten mit Python')        ## Titel festlegen

Das Toplevel-Widget root wird als Argument dem Textfensters übergeben, man nennt das eine Hierarchie von Objekten: zuoberst das Toplevel-Widget, dem Toplevel-Widget zugeordnet ist das Textfenster, dem Textfenster zugeordnet ist ein Popup-Menü und so weiter.
Beispiel: Text(root,height=20,width=90)

Methoden des Text-Widgets

Aus der Vielfalt der Methoden eine kleine Auswahl:

Weitere Methoden zeigt die folgende Sitzung (zu text_03.py)

>>> textfenster.mark_set("eins","1.end")  # Marke 'eins' setzen
>>> textfenster.mark_names()
('insert', 'eins', 'current')
>>> textfenster.index('eins')             # Index der Marke
'1.23'
>>> textfenster.index('insert')
'3.19'
>>> textfenster.index('current')
'3.19'
>>> textfenster.search('Python',END)      # Text 'Python' suchen
'2.6'
>>> textfenster.get('2.6','2.end')        # und ausgeben
'Python'
>>> textfenster.tag_add('Bunt','2.6','2.end')         # tag 'Bunt' erzeugen
>>> textfenster.tag_config('Bunt',foreground='red')   # Python in rot
>>> textfenster.tag_config('Bunt',foreground='green') # Python in grün
>>> textfenster.tag_config('Bunt',foreground='blue')  # Python in blau
>>> textfenster.tag_names()
('sel', 'Bunt')
<<<

Eingabezeilen (Entry)

Eingabezeilen sind so etwas ähnliches wie ein einzeiliges Text-Widget, Beispiel:


from Tkinter import *         ## Tkinter importieren
root=Tk()                     ## Wurzelfenster!
eingabe = Entry(root)         ## Eingabezeile erzeugen
eingabe.pack()                ## und anzeigen

Ergebnis:

Entry in Tkinter

Angenehm: Die Eigenschaften des Textfensters gelten -mit einer wichtigen Ausnahme- auch für die Eingabezeile. Die Ausnahme betrifft die Höhe (height), diese Eigenschaft macht bei Eingabezeilen keinen Sinn, da ja nur eine Zeile hinein passt . . .
Beispiel (zu den Eigenschaften):

Und so haben wir's gemacht:

eingabe = Entry(root,background='yellow',foreground='blue',font='courier',width=60)

Die drei wichtigsten Methoden des Entry-Widgets sind delete, get und insert:

Beispiel-Sitzung (zu entry_02.py):


>>> eingabe.insert(END,'jetzt einfuegen')
>>> eingabe.get()
'jetzt einfuegen'
>>> eingabe.delete(5)     ## Wirkung: 'jetzteinfuegen'
>>> eingabe.delete(5,END) ## Wirkung: 'jetzt'
<<<

root.mainloop

In den Beispielen hier fehlt der mainloop-Befehl: mainloop startet eine Endlosschleife (!), in der der Python-Interpreter auf Ereignisse wie Maus-Klicks, Maus-Bewegungen oder einem Tastendruck wie zum Beispiel der Enter-Taste wartet. Beendet wird die Endlosschleife, indem das root-Fenster geschlossen & zerstört wird! In Tkinter: root.destroy(). Da wir hier aber noch unsere Tkinter-Anwendung, also das Textfenster oder die Eingabezeile in IDLE verändern wollen, fehlt der mainloop-Befehl. Hierin unterscheiden sich auch die Python-Skripte: In den Beispiel-Programmen mit der Endung *.pyw steht am Ende jeweils der Befehl:
root.mainloop
Dies sind lauffähige Tkinter-Anwendungen, die man durch Anklicken starten kann. Dagegen fehlt in den Beispiel-Programmen für IDLE mit der Endung *.py am Ende jeweils der mainloop-Befehl: Diese Python-Skripte kann man nur in IDLE öffnen und dann mit
F5 = Run Module
starten. Dafür kann man in diesen Skripten in IDLE selbst noch Veränderungen vornehmen und testen, so wie wir das oben gemacht haben.
Fazit: willst du ein lauffähiges Tkinter-Skript programmieren, so musst du am Ende den Befehl mainloop aufrufen, weil sonst die Ereignisbehandlungsschleife nicht startet. Diese Skripte solltest du unter der Endung *.pyw abspeichern, w für Window!

<<<

<<<
    W. Spiegel, Kontakt