Seite 1 von 1

Sonderzeiche abfangen ?

Verfasst: Samstag 12. Juli 2003, 15:39
von Bugfix
Ist es möglich die Eingabe von Sonderzeichen zu unterbinden und stattdessen oe, ae und ue zu verwenden ?

Das Problem liegt daran das ich gerne ein Entry Label überwachen lassen will und falls die Eingabe ein Sonderzeichen ist wie z.B. ä ö oder ü diese direkt durch die obgie auswahl ersetzen zu lassen, geht das ?

Gehört vielleicht auch nach Gui Entwicklung aber die Frage ist allgemein doch sehr interessant :roll:

Re: Sonderzeiche abfangen ?

Verfasst: Samstag 12. Juli 2003, 20:21
von Voges
Hallo!
Bugfix hat geschrieben:Gehört vielleicht auch nach Gui Entwicklung
Denke ich auch, da das Problem nur mit den Möglichkeiten der jeweiligen GUI-Lib lösbar sein dürfte.

Um Tkinter geht's, nehme ich an. Im Prinzip ganz einfach: Das Event <KeyRelease> abfangen, den String aus dem Entry holen, ggf. den Umlaut ersetzen, den String wieder ins Entry zurückschreiben und schließlich die Textcursorposition ggf. anpassen. Im Detail ist das so ein Sache mit den Umlauten. Kleiner Hack (läuft unter W2K und Linux):

Code: Alles auswählen

from Tkinter import *
root=Tk()

tvar = StringVar()
b1 = Entry(root,textvariable=tvar)
b1.pack()

def onKeyRelease(e):
    s = tvar.get() 
    
    #print "%x%x" % (ord(s[-2]),ord(s[-1]))
    
    sAlt = s
    s = s.replace("\xc3\xa4","ae")
    s = s.replace("\xc3\xb6","oe")
    s = s.replace("\xc3\xbc","ue")

    if sAlt != s:
        tvar.set(s)
        curPos = b1.index(INSERT)
        b1.icursor(curPos+1)

b1.bind('<KeyRelease>',onKeyRelease)

root.mainloop()
Dieses "\xc3\xa4" ist die Unicode-Darstellung des 'ä'. Das geht nur so, da StringVar.get() eben einen Unicode-String zurückliefert.

Muss nicht die einzige Möglichkeit sein. Ich könnte mir vorstellen, dass es deutlich eleganter geht.

hth
Jan

Verfasst: Sonntag 13. Juli 2003, 01:48
von Gast [Bugfix]
Hab es mal versucht in den bestehen Code zu implementieren... aber hat leider nur "Index out of Range" Fehlermeldungen angezeigt..

Werde mal schauen ob ich mit "encode" was machen kann... :roll:

Trotzdem großes Danke für deine Bemühungen.

Verfasst: Sonntag 13. Juli 2003, 12:54
von Voges
Gast [Bugfix] hat geschrieben: aber hat leider nur "Index out of Range" Fehlermeldungen angezeigt..
Nanü? Innerhalb von onKeyRelease()? Da passiert eigenlich nix, was eine solche Exception auslösen könnte (außer natürlich die print-Zeile, wenn nicht 'auskommentiert').

Der Code war aber auch eher als Ideenlieferant gedacht, weniger als fertige Lösung. Beim Einfügen z.B. aus der Zwischenablage kommt es noch zu Fehlern.
Jan

Verfasst: Sonntag 13. Juli 2003, 13:04
von Bugfix
Also das Problem kommt eher indirekt durch die direkte Eingabe in das Entry Feld.

Ich habe eine Liste in der der Entry Inhalt einfgefügt wird, verschiebe ich einen Eintrag nach oben oder unten werden halt die Sonderzeichen mit den \xc3... (Unicode?) Zeichen ersetzt, weßhalb ich nach einer Lösung suche die entweder die Eingabe generell überbrügt oder entsprechen gleich richtig einsetzt.