tkinter - ttk.Entry

ttk.Entry

ttk.Entry erzeugen

entry = ttk.Entry(parent, Optionen)

OptionsnameBeschreibung
exportselectiontk.YES: Ausgewählter Text kann per STRG-C ins Clipboard exportiert werden (default)
invalidcommandEine Funktion, die ausgeführt wird, wenn die Validierungsfunktion unter der Option validatecommand 0 (Null) oder False zurückliefert
justifyAusrichtung des Textes: tk.LEFT, tk.CENTER oder tk.RIGHT
showwenn 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
textvariableVariable, die den Text des Eingabefeldes festhält
validatenone (default), focus, focusin, focusout, key oder all, bestimmt, wann validiert wird
validatecommandFunktion die den Text validiert, muss einen Boolean zurückliefern
widthBreite 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:

Bild der Anwendung
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:

ModiBeschreibung
nonekeine automatische Validierung
keyPre-Validierung, bevor ein neues Zeichen eingefügt/gelöscht wird. Änderung wird abgewiesen, wenn Validierung scheitert
focusRe-Validierung, wenn das Eingabefeld den Fokus erhält oder abgibt
focusinRe-Validierung, wenn das Eingabefeld den Fokus erhält
focusoutRe-Validierung, wenn das Eingabefeld den Fokus abgibt
allalle obengenannten Modi

Die folgende Tabelle zeigt die Substituierungen zur Validierungsfunktion:

SubstituierungBeschreibung
%dTyp: 1 Eingabevalidierung, 0 Löschvalidierung oder -1 Revalidierung
%iIndex, der hinzugefügt oder gelöscht wird. Ungültige Werte werden mit -1 gekennzeichnet
%Pfür den Mode key (Prevalidierung): Neuer Wert im Entry, wenn die Prevalidierung akzeptiert wurde, sonst: Inhalt des Eingabefeldes (Revalidierung)
%sInhalt vor der Änderung
%SEingefügter oder gelöschter Text, sofern vorhanden
%vWert der Option validate
%VBeschreibung des Modes, das die Validierung angestoßen hat: key, focus
%WName 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:

FunktionParameterRückgabewertBeschreibung
bbox(index)IndexRechteckGibt 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()-StringGibt den Inhalt der Textzeile zurück
icursor(index)Index-Setzt die Einfügemarke auf die mit index angegebene Position
index(index)Indexnumerischer IndexGibt 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()-BooleanTrue: Entry enthält Textauswahl
selection_range(anfang, ende)anfang, ende: Indices-Text zwischen den Indices wird ausgewählt
validate()-0 oder 1Revalidiert. Rückgabewert 0: Validierung scheiterte.

Weiterhin werden die folgenden allgemeinen Widgetmethoden unterstützt:

Referenzen

Siehe Auch

https://www.tcl.tk/man/tcl8.7/TkCmd/ttk_entry.html