Search code examples
pythonpython-curses

How can I use curses to respond to a key press without pausing the program to wait for an input?


An example of what I would like to do is the following:

import curses

while True:
        key = stdscr.getch()

        if key == 119:
            print("key w pressed")
        else:
            print("w key not pressed")

Where the else statement prints constantly, not only when a key is entered and getch does not return 119. In other words, I don't want the getch function to wait for a key press, I only want it to only return a key if a key is being pressed, otherwise return None or something like that.


Solution

  • In curses the window has a nodelay flag. If it is set to true, the getch function won't wait for user input, but will return -1 if no input is to be read.

    import curses
    
    stdscr.nodelay(True)
    
    while True:
            key = stdscr.getch()
            if key == -1:
                print("no key was pressed")
            elif key == 119:
                print("key w pressed")
            else:
                print("different key than w was pressed")