[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