4 Stimmen

Großschreibung im Tcl/Tk-Eingabefeld erzwingen

Ich habe ein Tcl/Tk-Fenster mit einem Eingabefeld, in dem ich die Eingabe von Großbuchstaben erzwingen möchte. Das heißt, wenn irgendwelche Buchstaben eingegeben werden, möchte ich, dass sie in Großbuchstaben im Eingabefeld erscheinen, anstatt einfach jede Kleinbuchstabeingabe abzulehnen.

Ich habe mir die Dokumentation für Eintrag und die Validierung von Einträgen Seite im Tcl/Tk-Wiki, aber ich habe wohl nicht an der richtigen Stelle gesucht, denn obwohl es viele Validierungsbeispiele gibt, kann ich kein Beispiel für das Filtern der Tasteneingabe finden, um die Groß-/Kleinschreibung zu ändern.

Am ehesten konnte ich etwas wie das Folgende herausfinden:

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    return 0
}

Dies zwingt die erste Zeichen in Großbuchstaben umgewandelt, aber nachfolgende Zeichen werden nicht übersetzt. Tatsächlich wird das Validierungsskript nach dem ersten Zeichen überhaupt nicht mehr aufgerufen. Wenn ich das .message insert zu testen, wird das Validierungsskript für jedes Zeichen aufgerufen.

5voto

mark4o Punkte 55639

Wenn Sie in Ihrem Validierungsbefehl einen neuen Wert für Ihren Eintrag festlegen, wird die Validierung ausgeschaltet (vermutlich um eine Endlosschleife zu verhindern). Sie können sie jedoch anschließend wieder einschalten:

entry .message -validate key -validatecommand {
    .message insert %i [string toupper "%S"]
    .message configure -validate key
    return 0
}

1voto

Jackson Punkte 5533

Alternativ können Sie auch Ereignisse und Bindungen verwenden:

entry .message
bind .message <KeyRelease> {
    set v [string toupper [.message get]]
    .message delete 0 end
    .message insert 0 $v
    }

pack .message

Dies gibt eine Vorstellung davon, was Sie tun könnten - die Verarbeitung in der Veranstaltung ist hier sehr einfach und könnte stark verbessert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X