Theorie: Text- & Eingabefenster



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 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_04.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 gruen
>>> 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 fur 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 wirs 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().


Aufgaben

  1. Probiere das Beispiel-Skript text_04.py in IDLE aus!
  2. Erstelle dein eigenes Text-Widget mit eigenem Schrift-Font (probiere arial, courier, times, helvetica oder ansi)! Teste auch font='times 30', was bewirkt die Zahlenangabe?
  3. Durch Tags (zu deutsch etwa Marken) kann man den Text im Nachhinein formatieren (vergleiche das Beispiel-Skript text_04.py). Überprufe das mittels fetter oder kursiver Schrift! Versuche mit fetter oder kursiver Schrift gehen so: font='times bold', font='arial italic' oder font='courier underline'.
  4. Vergiss nicht am Anfang deiner IDLE-Sitzung: from Tkinter import *
  5. Erstelle deine Eingabezeile! Lies die Eingabezeile aus (Wie?) und schreibe den Inhalt der Eingabezeile in das Textfenster.

→ sp, 2023-07-28