Beim Entry nur bestimmte Werte u Zeichen dann umwandeln

Fragen zu Tkinter.
Antworten
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

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...
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

vor allem weil man 6 und 7 mit einem Tastendruck schreiben kann.
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.
sedi
User
Beiträge: 104
Registriert: Sonntag 9. Dezember 2007, 19:22

@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])
CU sedi
----------------------------------------------------------
Python 3.5; Python 3.6
LinuxMint18
Antworten