Hi,
im Modul pygame gibt es Konstanten (integer), welche die Event-Typen darstellen, also zb. pygame.QUIT, pygame.MOUSEBUTTONDOWN usw.
Wenn jetzt so ein Event ankommt, würde ich gerne aus dieser Konstante einen String machen, sprich wenn event == pygame.QUIT, dann string_event = "pygame.QUIT" oder "QUIT".
Irgendwie sagt mir mein Verstand, dass das so nicht funktioniert, da in event ja nicht die Bezeichnung, sondern nur der Integer steht. Oder irre ich mich da?
Wie könnte man sowas elegant lösen, ich möchte auf eine Reihe if-Abfragen verzichten.
Danke
Variablenname -> String
Hallo!
pygameDict = { pygame.QUIT : "QUIT" , pygame.MOUSEBUTTONDOWN : "MOUSEBUTTONDOWN" }
...
string_event = pygameDict[event]
Jan
Am ehesten wohl mit einem Dictionary:Maurice hat geschrieben:Wie könnte man sowas elegant lösen, ich möchte auf eine Reihe if-Abfragen verzichten.
pygameDict = { pygame.QUIT : "QUIT" , pygame.MOUSEBUTTONDOWN : "MOUSEBUTTONDOWN" }
...
string_event = pygameDict[event]
Jan
Hallo!
Beides zusammen:
Jan
Ja, das bekäme man vielleicht hin, und zwar mit Buildin-Funktionen dir() und getattr(). Allerdings sind die Events irgendwie nicht einheitlich benannt, so dass man sie nicht so einfach von den anderen Attributen unterscheiden kann.maurice hat geschrieben:Hab mir überlegt ob man nicht vielleicht direkt im pygame-Modul suchen könnte, quasi als dict-Ersatz, dort stehen ja die Bezeichnungen drin.
Code: Alles auswählen
>>> dir(pygame)
['ACTIVEEVENT', 'ANYFORMAT', 'ASYNCBLIT', 'AUDIO_S16', 'AUDIO_S16LSB', 'AUDIO_S16MSB', 'AUDIO_S16SYS', 'AUDIO_S8', 'AUDIO_U16', 'AUDIO_U16LSB', 'AUDIO_U16MSB', 'AUDIO_U16SYS', 'AUDIO_U8', 'Color', 'DOUBLEBUF', 'FULLSCREEN', 'GL_ACCUM_ALPHA_SIZE', 'GL_ACCUM_BLUE_SIZE', ...
>>> getattr(pygame,'K_TAB')
9
Code: Alles auswählen
>>> [(attr,getattr(pygame,attr)) for attr in dir(pygame) if attr.startswith("K_")]
[('K_0', 48), ('K_1', 49), ('K_2', 50), ('K_3', 51), ('K_4', 52), ('K_5', 53), ('K_6', 54), ('K_7', 55), ('K_8', 56), ('K_9', 57), ('K_AMPERSAND', 38), ('K_ASTERISK', 42), ('K_AT', 64), ('K_BACKQUOTE', 96), ('K_BACKSLASH', 92), ('K_BACKSPACE', 8), ('K_BREAK', 318), ('K_CAPSLOCK', 301), ('K_CARET', 94), ('K_CLEAR', 12), ('K_COLON', 58), ('K_COMMA', 44), ('K_DELETE', 127), ('K_DOLLAR', 36), ('K_DOWN', 274), ('K_END', 279), ('K_EQUALS', 61), ('K_ESCAPE', 27), ('K_EURO', ...
Danke nochmal, hätte damit jetzt schonmal alle Namen der Konstanten mit dem selben Wert bekommen (wären allerdings mehr als eine).
Aber, beim rumspielen mit dir(pygame) bin ich auf pygame.event.event_name() gestoßen.
Das ist genau was ich gesucht hab, hätte mal gleich genauer in der Dokumentation gucken sollen
Aber, beim rumspielen mit dir(pygame) bin ich auf pygame.event.event_name() gestoßen.
Das ist genau was ich gesucht hab, hätte mal gleich genauer in der Dokumentation gucken sollen