|
|
|
|
|
|
|
|
|
|
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 textfenster = Text() ## Ein Textfenster erzeugen textfenster.pack() ## und anzeigen!
Ergebnis:

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!):
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 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 für 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') delete('1.0','1.end'): löscht die erste Zeiletextfenster.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_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 sind so etwas ähnliches wie ein einzeiliges Text-Widget, Beispiel:
from Tkinter import * ## Tkinter importieren eingabe = Entry() ## Eingabezeile erzeugen eingabe.pack() ## und anzeigen!
Ergebnis:
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:
insert(END,'jetzt einfuegen'): die Zeichenkette 'jetzt einfuegen' wird in die Eingabezeile geschrieben. Mit Umlauten wird's schwieriger, hierzu müssen wir Unicode (?!?) benutzen, Beispiel:eingabe.insert(END,u'jetzt einf\xfcgen')\xfc steht für ein ü (wie in HTML das ü), hierzu eine Mini-Tabelle:
| Zeichen | in Unicode |
|---|---|
| ä | \xe4 |
| ö | \xf6 |
| ü | \xfc |
| Ä | \xc4 |
| Ö | \xd6 |
| Ü | \xdc |
| ß | \xdf |
| € | \u20ac |
u'jetzt einf\xfcgen'. 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:
>>> eingabe.insert(END,'jetzt einfuegen') >>> eingabe.get() 'jetzt einfuegen' >>> eingabe.delete(5) ## Wirkung: 'jetzteinfuegen' >>> eingabe.delete(5,END) ## Wirkung: 'jetzt'
text_03.py in IDLE aus!
arial, courier, times, helvetica oder ansi)!
Teste auch font='times 30', was bewirkt die Zahlenangabe?
text_03.py). Überprüfe 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 *