Tastendruck abfragen

  • Hallo leute,

    ich weiß nicht inwiefern das realisierbar ist, aber ich muss für eine "Fernsteuerung" die Tasten "W A S D" abfangen. Die Tasten können kombiniert vorkommen.
    Wie kann ich das schnell auslesen? Sowas wie input bzw raw_input wäre da ja total dämlich oder?

    Marc

  • Die Frage wäre ob du eine GUI verwenden willst oder das nur auf Basis der Console ablaufen soll :huh:

    Man muss dafür nicht zwangsläufig pygame verwenden, das geht auch mithilfe curses oder TKinter oder simplegui oder signal oder wx oder raw_input ;)

    Es gäbe also quasi unzählige Möglichkeiten

    Problem mit pygame und anderen GUI basierten Möglichkeiten ist, dass man zwangsläufig eine GUI initialisieren muss damit ein Key-Event behandelt werden kann. So musst du bei pygame zwangsweise eine GUI aktivieren in der eine Taste gedrückt werden kann, das kann nicht aus der Konsole abgefangen/abgefragt werden!
    Es geht also nur so:[code=php]
    #!/usr/bin/python
    # coding: utf-8

    import pygame

    pygame.init()
    screen = pygame.display.set_mode((640, 480))
    pygame.display.set_caption('Pygame Caption')
    pygame.mouse.set_visible(0)

    finished = False
    while not finished:
    for event in pygame.event.get():
    if (event.type == pygame.KEYUP) or (event.type == pygame.KEYDOWN):
    print(event)
    if (event.key == pygame.K_ESCAPE):
    finished = True
    [/php]

    Um das über Netzwerk nutzen zu können müsstest du Xming & X11-Forwarding einrichten, dann öffnet sich ein Fenster auf deinem PC und nur wenn du in diesem Fenster eine Taste drückst reagiert das Python Script darauf, aber nicht wenn du in der SSH-Konsole etwas machst...

    Deshalb glaub ich nicht das pygame eine so gute Lösung wäre - kenne aber deine Anforderungen/Umgebung nicht

    Mit raw_input() ginge das direkt auf der Konsole Beispielsweise so:
    [code=php]
    #!/usr/bin/python
    # coding: utf-8

    finished = False
    while not finished:
    try:
    print("Eingabe?"),
    input = raw_input()
    print("Deine Eingabe-> %s" % input)
    if input == "q":
    print("quit")
    finished = True
    except (KeyboardInterrupt, SystemExit):
    finished = True
    [/php]
    Die while Schleife blockiert dann aber das restliche Script, es kann also dann nichts anderes mehr simultan ausgeführt werden. Um das trotzdem noch zu können, weil z.B. auch noch Sensoren abgefragt werden sollen, müsste man dafür einen Thread erstellen:
    [code=php]
    #!/usr/bin/python
    # coding: utf-8

    import threading
    from time import sleep
    import sys

    finished = False

    def Input_Thread():
    global finished
    try:
    while not finished:
    print("Eingabe?"),
    input = raw_input()
    print("Deine Eingabe-> %s" % input)
    if input == "q":
    print("quit")
    finished = True
    except (KeyboardInterrupt, SystemExit):
    sys.exit()

    thread2 = threading.Thread(target=Input_Thread)
    thread2.start()

    while not finished:
    try:
    print("..Script's Thread..")
    sleep(2)
    except (KeyboardInterrupt, SystemExit):
    finished = True
    sys.exit()
    [/php]

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!