ttk.Entry
ttk.Entry erzeugen
entry = ttk.Entry(parent, Optionen)
| Optionsname | Beschreibung |
|---|---|
| exportselection | tk.YES: Ausgewählter Text kann per
STRG-C ins Clipboard exportiert werden (default) |
| invalidcommand | Eine Funktion, die ausgeführt wird, wenn die Validierungsfunktion unter der Option validatecommand 0 (Null) oder False zurückliefert |
| justify | Ausrichtung des Textes: tk.LEFT, tk.CENTER oder tk.RIGHT |
| show | wenn gesetzt, dann wird der Text selbst ersetzt durch Folgen von '*' oder ähnlichem. Nützlich für Passwort-Felder |
| state | 'readonly': Entry ist nicht editierbar, 'normal': Entry ist editierbar (default) oder
'disabled': Text kann nicht editiert oder ausgewählt werden, keine Interaktion möglich |
| textvariable | Variable, die den Text des Eingabefeldes festhält |
| validate | none (default), focus, focusin, focusout, key oder all, bestimmt, wann validiert wird |
| validatecommand | Funktion die den Text validiert, muss einen Boolean zurückliefern |
| width | Breite des Eingabefeldes in mittlere Zeichenbreite |
ttk.Entry kennt die Standardoptionen: class_, cursor, font, foreground, placeholder, style, takefocus und xscrollcommand
Das folgende Programm stellt ein Eingabefeld als Passwort-Feld vor. Der Text wird in einem Label angezeigt:
import tkinter as tk
from tkinter import ttk
class A(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("300x200")
self._createWidgets()
def _createWidgets(self):
self.svar = tk.StringVar()
self.entry = ttk.Entry(self,
textvariable=self.svar,
show='?')
self.entry.pack()
ttk.Label(self, textvariable=self.svar, background='yellow', width=20).pack()
if __name__ == '__main__':
window = A()
window.mainloop()
Validierung
Die folgende Tabelle zeigt die Validierungsmodi zur Option validate:
| Modi | Beschreibung |
|---|---|
| none | keine automatische Validierung |
| key | Pre-Validierung, bevor ein neues Zeichen eingefügt/gelöscht wird. Änderung wird abgewiesen, wenn Validierung scheitert |
| focus | Re-Validierung, wenn das Eingabefeld den Fokus erhält oder abgibt |
| focusin | Re-Validierung, wenn das Eingabefeld den Fokus erhält |
| focusout | Re-Validierung, wenn das Eingabefeld den Fokus abgibt |
| all | alle obengenannten Modi |
Die folgende Tabelle zeigt die Substituierungen zur Validierungsfunktion:
| Substituierung | Beschreibung |
|---|---|
| %d | Typ: 1 Eingabevalidierung, 0 Löschvalidierung oder -1 Revalidierung |
| %i | Index, der hinzugefügt oder gelöscht wird. Ungültige Werte werden mit -1 gekennzeichnet |
| %P | für den Mode key (Prevalidierung): Neuer Wert im Entry, wenn die Prevalidierung akzeptiert wurde, sonst: Inhalt des Eingabefeldes (Revalidierung) |
| %s | Inhalt vor der Änderung |
| %S | Eingefügter oder gelöschter Text, sofern vorhanden |
| %v | Wert der Option validate |
| %V | Beschreibung des Modes, das die Validierung angestoßen hat: key, focus… |
| %W | Name des Eingabefeldes in Tcl/Tk-Notation |
Die Umsetzung der Tcl/Tk-Validierung erfolgt mit Hilfe einer Validierungsfunktion,
die man zuerst registrieren muss. Dafür ist die
Zeile validateFunc = self.register(self._entryValidate) da.
Das folgende Programm erlaubt nur Ziffern:
import tkinter as tk
from tkinter import ttk
class A(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("300x200")
self._createWidgets()
def _createWidgets(self):
validateFunc = self.register(self._entryValidate)
self.svar = tk.StringVar()
self.entry = ttk.Entry(self,
textvariable=self.svar,
invalidcommand=self._onInvalid,
validate='all',
validatecommand=(validateFunc, '%d', '%s', '%S'))
self.entry.pack()
ttk.Label(self, textvariable=self.svar, background='yellow', width=20).pack()
def _onInvalid(self):
print('invalid')
def _entryValidate(self, reason, oldText, editText):
"""Nur Ziffern"""
r = int(reason)
if reason == '0':
print('Delete Text:', editText, 'from: ', oldText)
return True
if reason == '1':
print('Insert Text:', editText, 'to: ', oldText)
return editText in '0123456789'
return True
if __name__ == '__main__':
window = A()
window.mainloop()
Entry-Methoden
Indices:
- Zahl: numerischer Index des Zeichens im Entry, startet bei 0
@Zahl: X-Position eines Zeichensend: gedachte Position hinter dem letzten Zeicheninsert: das Zeichen hinter der Einfügemarkesel.first, sel.last: Anfang und Ende der Auswahl
| Funktion | Parameter | Rückgabewert | Beschreibung |
|---|---|---|---|
| bbox(index) | Index | Rechteck | Gibt ein Rechteck (Pixel-Koordinaten) aus, das das Zeichen am index enthält |
| delete(anfang, ende=None) | anfang, ende: Indices | - | Löscht die Zeichen von anfang bis ende oder nur das einzelne Zeichen |
| get() | - | String | Gibt den Inhalt der Textzeile zurück |
| icursor(index) | Index | - | Setzt die Einfügemarke auf die mit index angegebene Position |
| index(index) | Index | numerischer Index | Gibt den Index des Zeichens am angegebenen Index zurück |
| insert(index, text) | Index und Text | - | fügt Text vor dem Index ein |
| selection_clear() | - | - | Entfert die Auswahl-Markierung |
| selection_present() | - | Boolean | True: Entry enthält Textauswahl |
| selection_range(anfang, ende) | anfang, ende: Indices | - | Text zwischen den Indices wird ausgewählt |
| validate() | - | 0 oder 1 | Revalidiert. Rückgabewert 0: Validierung scheiterte. |
Weiterhin werden die folgenden allgemeinen Widgetmethoden unterstützt:
- Konfigurationsmethoden:
cget(…)undconfigure(…) - Sonstige Methoden:
identify(…),instate(…)undstate(…)