[python-users] Benutzer Eingaben bei Tkinter und ScrolledText ändern.
jens
python at jensdiemer.de
Mi Aug 27 16:35:48 CEST 2014
Ich möchte mit Tkinter und ScrolledText die Eingaben des Benutzers on-the-fly
ändern. z.B. so:
if char in string.letters:
char = char.upper()
Also das z.B. kleinbuchstaben, die der Benutzer ins ScrolledText eingibt zu
Großbuchstaben wird.
Ich hab dazu mal einen Test Skript gemacht:
https://gist.github.com/jedie/ae4f974d00a417183b2c
Es funktioniert nur ein bisschen. Der Teil hier:
...
char = event.char
...
converted_char = char.upper()
self.text.insert(Tkinter.CURRENT, converted_char)
return "break"
...hat zwar zur folge das Großbuchstaben eingefügt werden. Aber erstens, an der
falscher Stelle und zweitens erscheinen auch die eingegeben Kleinbuchstaben.
Je nach dem wo man sich im Beispieltext befindet ist Tkinter.CURRENT
offensichtlich nicht wirklich die Position des Text-Cursors.
Das return "break" hat offensichtlich nicht zur folge, das die Eingabe des
Benutzers ignoriert wird.
Dabei ist es egal, welche Events ich von den folgenden nutzte:
self.root.bind("<Key>", self.event_key)
self.root.bind("<KeyPress>", self.event_key_press)
self.root.bind("<KeyRelease>", self.event_key_relese)
Ich könnte natürlich mit dem Trick arbeiten: ScrolledText mit Tkinter.DISABLED
zu deaktivieren, dann bei Eingaben kurz sowas machen:
self.text.config(state=Tkinter.NORMAL)
self.text.insert(Tkinter.CURRENT, converted_char)
self.text.config(state=Tkinter.DISABLED)
Vorteil:
Es kommt zu keinen doppelten Eingaben.
Nachteil:
Es gibt keinen Cursor mehr und man hat keine funktionierende Cursor-Tasten
Navigation und noch ein paar andere Nachteile...
Also eigentlich keine Lösung.
Ideen?
--
Mfg.
Jens Diemer
----
http://www.jensdiemer.de
Mehr Informationen über die Mailingliste python-users