Python Key press and Key Release Listener

前端 未结 2 2017
眼角桃花
眼角桃花 2021-01-01 00:08

I am controlling a remote toy car using python code .As of now the code is as below

def getkey():
        fd = sys.stdin.fileno()
        old = termios.tcget         


        
相关标签:
2条回答
  • 2021-01-01 00:47

    I've seen Pygame game development library being successfully used in similar scenarios before, handling realtime systems and machinery in production, not just toy examples. I think it's a suitable candidate here too. Check out pygame.key module for what is possible to do with the keyboard input.

    In short, if you are not familiar with game development, you basically continuously poll for events such as input state changes inside an 'infinite' game loop and react accordingly. Usually update the parameters of the system using deltas per time elapsed. There's plenty of tutorials on that and Pygame available around and Pygame docs are pretty solid.

    A simple example of how to go about it:

    import pygame
    
    pygame.init()
    
    # to spam the pygame.KEYDOWN event every 100ms while key being pressed
    pygame.key.set_repeat(100, 100)
    
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_w:
                    print 'go forward'
                if event.key == pygame.K_s:
                    print 'go backward'
            if event.type == pygame.KEYUP:
                print 'stop'
    

    You'll need to play with pygame.KEYDOWN, pygame.KEYUP and pygame.key.set_repeat depending on how your car movement is implemented.

    0 讨论(0)
  • 2021-01-01 00:47

    Faced a similar problem (I am no Python expert) but this worked for me

    import pynput
    from pynput import keyboard 
    
    def on_press(key):
        try:
            print('Key {0} pressed'.format(key.char))
            #Add your code to drive motor
        except AttributeError:
            print('Key {0} pressed'.format(key))
            #Add Code
    def on_release(key):
        print('{0} released'.format(key))
        #Add your code to stop motor
        if key == keyboard.Key.esc:
            # Stop listener
            # Stop the Robot Code
            return False
    
    # Collect events until released
    with keyboard.Listener(
            on_press=on_press,
            on_release=on_release) as listener:
        listener.join()
    
    0 讨论(0)
提交回复
热议问题