Aber was ist mit z.B. ENTER, Backspace, ESC, Shift usw. ?
Hab ein paar Tests gemacht. Sieht so aus, das PyGame event.scancode und Tkinter event.keycode die selben Werte liefern. (Zumindest bei meinen getesteten Tasten):
Code: Alles auswählen
"""
Display PyGame Keycodes
=======================
1 - Char: u'1' - scancode: dez.: 10, hex: $0a - key: dez.: 49, hex: $31
2 - Char: u'2' - scancode: dez.: 11, hex: $0b - key: dez.: 50, hex: $32
a - Char: u'a' - scancode: dez.: 38, hex: $26 - key: dez.: 97, hex: $61
A - Char: u'A' - scancode: dez.: 38, hex: $26 - key: dez.: 97, hex: $61
b - Char: u'b' - scancode: dez.: 56, hex: $38 - key: dez.: 98, hex: $62
B - Char: u'B' - scancode: dez.: 56, hex: $38 - key: dez.: 98, hex: $62
@ - Char: u'@' - scancode: dez.: 24, hex: $18 - key: dez.: 113, hex: $71
Space - Char: u' ' - scancode: dez.: 65, hex: $41 - key: dez.: 32, hex: $20
ENTER - Char: u'\r' - scancode: dez.: 36, hex: $24 - key: dez.: 13, hex: $0d
ESC - Char: u'\x1b' - scancode: dez.: 9, hex: $09 - key: dez.: 27, hex: $1b
Shift left - Char: u'' - scancode: dez.: 50, hex: $32 - key: dez.: 304, hex: $130
Shift right - Char: u'' - scancode: dez.: 62, hex: $3e - key: dez.: 303, hex: $12f
Backspace - Char: u'\x08' - scancode: dez.: 22, hex: $16 - key: dez.: 8, hex: $08
Up - Char: u'' - scancode: dez.: 111, hex: $6f - key: dez.: 273, hex: $111
Down - Char: u'' - scancode: dez.: 116, hex: $74 - key: dez.: 274, hex: $112
Left - Char: u'' - scancode: dez.: 113, hex: $71 - key: dez.: 276, hex: $114
Right - Char: u'' - scancode: dez.: 114, hex: $72 - key: dez.: 275, hex: $113
"""
import sys
import pygame
screen = pygame.display.set_mode((560, 384))
pygame.display.set_caption("Keycodes Example")
def verbose_value(value):
return "dez.: %i, hex: $%02x" % (value,value)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
print " --- END --- "
sys.exit()
if event.type == pygame.KEYDOWN:
print event
char = event.unicode
scancode = event.scancode
key = event.key
print "Char: %s - scancode: %s - key: %s" % (
repr(char),
verbose_value(scancode),
verbose_value(key),
)
print
Code: Alles auswählen
"""
Display Tkinter Keycodes
========================
1 - Char: '1' - keycode: dez.: 10, hex: $0a
2 - Char: '2' - keycode: dez.: 11, hex: $0b
a - Char: 'a' - keycode: dez.: 38, hex: $26
A - Char: 'A' - keycode: dez.: 38, hex: $26
b - Char: 'b' - keycode: dez.: 56, hex: $38
B - Char: 'B' - keycode: dez.: 56, hex: $38
@ - Char: '@' - keycode: dez.: 24, hex: $18
Space - Char: ' ' - keycode: dez.: 65, hex: $41
ENTER - Char: '\r' - keycode: dez.: 36, hex: $24
ESC - Char: '\x1b' - keycode: dez.: 9, hex: $09
Shift left - Char: '' - keycode: dez.: 50, hex: $32
Shift right - Char: '' - keycode: dez.: 62, hex: $3e
Backspace - Char: '\x08' - keycode: dez.: 22, hex: $16
Up - Char: '' - keycode: dez.: 111, hex: $6f
Down - Char: '' - keycode: dez.: 116, hex: $74
Left - Char: '' - keycode: dez.: 113, hex: $71
Right - Char: '' - keycode: dez.: 114, hex: $72
"""
import sys
import Tkinter
def verbose_value(value):
return "dez.: %i, hex: $%02x" % (value,value)
class TkKeycodes(object):
def __init__(self):
self.root = Tkinter.Tk()
self.root.title("Keycodes Example")
self.root.geometry("+500+300")
self.root.bind("<Key>", self.event_key_pressed)
self.root.update()
def event_key_pressed(self, event):
char = event.char # pressed character (KeyPress, KeyRelease)
keycode = event.keycode # keycode of the pressed key (KeyPress, KeyRelease)
print "Char: %s - keycode: %s" % (
repr(char),
verbose_value(keycode),
)
def mainloop(self):
self.root.mainloop()
tk_keys = TkKeycodes()
tk_keys.mainloop()
A.) Sollte ich generell auf keycode/scancode setzten, oder besser event.char/event.unicode bei "normalen" Zeichen nehmen?
B.) Sind die codes einheitlich, egal. welche Tastatur / Betriebssystem?