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:
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!):
height
bzw. width
: Bestimmt Höhe bzw. Breite des Textfensters in Zeichen, Text(height=20,width=90)
background
: Bestimmt die Hintergrundfarbe des Textfensters, Text(background='white')
foreground
: Bestimmt die Vordergrundfarbe (=Schriftfarbe) des Textfensters, Text(foreground='blue')
font
: Bestimmt den Schriftfont des Textfensters, Text(font='courier')
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)
Aus der Vielfalt der Methoden eine kleine Auswahl:
get('1.0',END)
: holt den Text aus dem Textfenster ab der Position 1.0 bis zum ENDe, die Schreibweise '1.0' steht fur die 1. Zeile und die 0. Spalte. textfenster.get('1.0',END)
(holt den ganzen Text!)textfenster.get('1.0','1.end')
(holt 1. Zeile) insert(END,'Text-Widgets in Tkinter')
: fügt den Text 'Text-Widgets in Tkinter' an der Position END ein. textfenster.insert('2.end','Text-Widgets in Tkinter')
(fügt den Text am Ende der zweiten Zeile ein) delete('1.0','1.end')
: löscht die erste Zeile textfenster.delete('1.0',END)
(löscht den gesamten Text!)see(END)
bzw. yview(END)
: Beide Methoden scrollen den Text so, dass der Index (hier: END) sichtbar ist, bei yview(END)
wandert der Index im Fenster zusätzlich nach oben. textfenster.see(END)
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 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:
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
:
get()
: liefert den Inhalt der Eingabezeile als String zurück. delete(5)
: löscht das Zeichen an der 6. Stelle (tkinter beginnt bei 0 zu zählen!) bzw. delete(5,END)
: löscht alles ab der 6. Stelle bis zum ENDe. 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'
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().
text_04.py
in IDLE aus! arial
, courier
, times
, helvetica
oder ansi
)! Teste auch font='times 30'
, was bewirkt die Zahlenangabe? 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'
. from Tkinter import *
→ sp, 2023-07-28