Seite 1 von 1

Beim Entry nur bestimmte Werte u Zeichen dann umwandeln

Verfasst: Freitag 31. Mai 2013, 19:23
von sedi
Hallo zusammen,

ich habe folgendes Anliegen: Ich will ein Entry erstellen, indem nur bestimmte Eingaben erlaubt sind (das alleine stellt nicht das Problem dar, das folgende schon...) zudem sollen einige der erlaubten Eingaben in andere Zeichen umgewandelt werden. Folgende Eingaben sollen folgende Anzeigen im Entry ergeben:

Taste --> Darstellung im Entry
e --> 1
z --> 2
d --> 3
...
n --> 9
o --> 0
, --> .

Warum? Bei vielen Laptops sind keine Nummernfelder dabei. So könnte man Ziffern schnell eingeben...

Danke im Voraus...

Re: Beim Entry nur bestimmte Werte u Zeichen dann umwandeln

Verfasst: Freitag 31. Mai 2013, 20:40
von Sirius3
vor allem weil man 6 und 7 mit einem Tastendruck schreiben kann.

Re: Beim Entry nur bestimmte Werte u Zeichen dann umwandeln

Verfasst: Freitag 31. Mai 2013, 20:50
von BlackJack
Ich sehe auch nicht wie über die ganze Tastatur verteilte Buchstaben besser für die Zahleneingabe sein sollen als die normalen Zifferntasten. Der Vorteil eines Nummernblocks ist ja gerade, dass die Ziffern dort als Block kompakt angeordnet sind und so die Wege kürzer sind als bei der normalen Ziffernreihe.

Da würde ich eher in einen externen Ziffernblock investieren.

Re: Beim Entry nur bestimmte Werte u Zeichen dann umwandeln

Verfasst: Freitag 31. Mai 2013, 21:23
von sedi
@sirius3: ein bischen Fantasie bitte: s --> 6; i --> 7
@blackjack: Kein Nummernblock am Laptop

Ihr wollt also eine Rechtfertigung:
Kann man bestimmte Tasten für Zahlen- oder Ziffernwerte belegen so kann man mittels der Tab-Taste bestimmte Felder (Entries) anspringen und dort Taste dann die Zahlenwerte eingeben.

Für mich ist das deutlich erleichternd, da ich die Hände so nicht von der Tastatur nehmen muss. Wenn man nun einwendet, dass beim 10-Fingersystem ja oben die Zahlenreihe ist, dann stimmt das schon nur reicht dafür mein Können im Zehnfingersystem leider nicht aus :oops:

Nun wieder zum eigentlichen Problem, hab schon einiges (vergebens) versucht. Hier mal einer der Fehlversuche:

Code: Alles auswählen

class MapEntry(ttk.Tkinter.Entry):
    Map = {
        "e": "1",
        "z": "2",
        "d": "3",
        "v": "4",
        "f": "5",
        "s": "6",
        "i": "7",
        "a": "8",
        "n": "9",
        "o": "0",
        ",": ",5",
        
        "1": "1",
        "2": "2",
        "3": "3",
        "4": "4",
        "5": "5",
        "6": "6",
        "7": "7",
        "8": "8",
        "9": "9",
        "0": "0",
        ".": ".5"
        }
        
    def __init__(self, master, mapping=Map, **kwargs):
        ttk.Tkinter.Entry.__init__(self,
                                   master,
                                   **kwargs)
        self.mapping = mapping
        self.bind('<KeyPress>', self.key_down)
    
    def key_down(self, evt):
        self.delete(0, ttk.Tkinter.END)
        if self.mapping.has_key(evt.char):
            self.insert(0, self.get() + self.mapping[evt.char])