Eingaben vereinheitlichen: KeyCodes, event.keysym

Fragen zu Tkinter.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Bin nun noch mal bei dem Problem von http://www.python-forum.de/viewtopic.php?f=1&t=34443
Wobei PyGame erstmal raus ist... Also nochmal ein neuer Thread:

Also es geht um Tastatur eingaben zwischen Windows und Linux...

Bisher habe ich es so gemacht:

Code: Alles auswählen

char_or_code = event.char or event.keycode
Nur der keycode ist zwischen Linux/Windows nicht gleich. z.B. bei den Pfeiltasten.

Nun könnte ich event.keysym nehmen. Dort erhält man Wörter der Tasten, z.b.:

Code: Alles auswählen

event.char: 'a'    event.keycode: 65  event.keysym: 'a'         event.keysym_num:    97
event.char: 'b'    event.keycode: 66  event.keysym: 'b'         event.keysym_num:    98
event.char: 'c'    event.keycode: 67  event.keysym: 'c'         event.keysym_num:    99
event.char: ''     event.keycode: 16  event.keysym: 'Shift_L'   event.keysym_num: 65505
event.char: 'A'    event.keycode: 65  event.keysym: 'A'         event.keysym_num:    65
event.char: 'B'    event.keycode: 66  event.keysym: 'B'         event.keysym_num:    66
event.char: 'C'    event.keycode: 67  event.keysym: 'C'         event.keysym_num:    67
event.char: ''     event.keycode: 37  event.keysym: 'Left'      event.keysym_num: 65361
event.char: ''     event.keycode: 38  event.keysym: 'Up'        event.keysym_num: 65362
event.char: ''     event.keycode: 39  event.keysym: 'Right'     event.keysym_num: 65363
event.char: ''     event.keycode: 40  event.keysym: 'Down'      event.keysym_num: 65364
event.char: ''     event.keycode: 16  event.keysym: 'Shift_R'   event.keysym_num: 65506
event.char: '\r'   event.keycode: 13  event.keysym: 'Return'    event.keysym_num: 65293
event.char: '\x08' event.keycode: 8   event.keysym: 'BackSpace' event.keysym_num: 65288
event.char: '\x1b' event.keycode: 27  event.keysym: 'Escape'    event.keysym_num: 65307
event.char: ''     event.keycode: 16  event.keysym: 'Shift_L'   event.keysym_num: 65505
event.char: '!'    event.keycode: 49  event.keysym: 'exclam'    event.keysym_num:    33
event.char: '"'    event.keycode: 50  event.keysym: 'quotedbl'  event.keysym_num:    34
event.char: '§'    event.keycode: 51  event.keysym: 'section'   event.keysym_num:   167
event.char: ''     event.keycode: 112 event.keysym: 'F1'        event.keysym_num: 65470
event.char: ''     event.keycode: 113 event.keysym: 'F2'        event.keysym_num: 65471
event.char: ''     event.keycode: 114 event.keysym: 'F3'        event.keysym_num: 65472
event.char: ''     event.keycode: 36  event.keysym: 'Home'      event.keysym_num: 65360
event.char: ''     event.keycode: 35  event.keysym: 'End'       event.keysym_num: 65367
event.char: ''     event.keycode: 46  event.keysym: 'Delete'    event.keysym_num: 65535
event.char: ''     event.keycode: 45  event.keysym: 'Insert'    event.keysym_num: 65379
event.char: ''     event.keycode: 33  event.keysym: 'Prior'     event.keysym_num: 65365
event.char: ''     event.keycode: 34  event.keysym: 'Next'      event.keysym_num: 65366
Theoretisch könnte man anscheinend einfach immer event.keysym nehmen und gut oder?
Mich stört allerdings, das darin auch normale ASCII Zeichen als Wörter ausgeschieben sind :(

Nun überlege ich das zu machen:

Code: Alles auswählen

if event.keysym_num>64000:
    inkey=event.keysym
else:
    inkey=event.char
Wobei 64000 einfach nur mal so gesetzt ist.

Woher kommen eigentlich diese keysym Wörter? In tkinter.constants sind die ja nicht. Sind die wirklich überall gleich?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@jens: Wenn ich mal raten müsste kommen die hierher: …/X11/keysymdef.h.
Antworten