Sonderzeiche abfangen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bugfix
User
Beiträge: 30
Registriert: Mittwoch 9. Juli 2003, 15:58

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:
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
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.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
Bugfix
User
Beiträge: 30
Registriert: Mittwoch 9. Juli 2003, 15:58

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.
Antworten