Skip to content Skip to sidebar Skip to footer

Python Continue From Input With The Space Key

I'm making a typing speed test game and trying to make it so that when a user is typing into a python input(), it can be submitted by them pressing space rather than just enter, on

Solution 1:

Solved this by creating my own input function as below:

def custom_input(prefix=""):
    """Custom string input that submits with space rather than enter"""
    concatenated_string = ""
    sys.stdout.write(prefix)
    sys.stdout.flush()
    while True:
        key = ord(getch())
        # If the key is enter or space
        if key == 32 or key == 13:
            break
        concatenated_string = concatenated_string + chr(key)
        # Print the characters as they're entered
        sys.stdout.write(chr(key))
        sys.stdout.flush()
    return concatenated_string

Solution 2:

The following code is modified from the answer How to code autocompletion in python? given by @gandi.

It can get input from user in real time. Backspace will move back cursor for a character.

Some other good references

Python read a single character from the user

import termios, os, sys

def flush_to_stdout(c):
    if c == b'\x7f':
        sys.stdout.write("\b \b")
    else:
        sys.stdout.write(c.decode("utf-8"))
        sys.stdout.flush()

def getkey():
    fd = sys.stdin.fileno()
    old = termios.tcgetattr(fd)
    new = termios.tcgetattr(fd)
    new[3] = new[3] & ~termios.ICANON & ~termios.ECHO
    new[6][termios.VMIN] = 1new[6][termios.VTIME] = 0
    termios.tcsetattr(fd, termios.TCSANOW, new)
    c = None
    try:
        c = os.read(fd, 1)       
        flush_to_stdout(c)
    finally:
        termios.tcsetattr(fd, termios.TCSAFLUSH, old)
    if c == b'\x7f': # Backspace/delete is hitreturn"delete"return c.decode("utf-8")

def get_word():
    s = ""while True:
        a = getkey()
        # if ENTER or SPACE is hitif a == " "or a == "\n": 
            return s
        elif a == "delete":
            s = s[:-1]
        else:
            s += a


if __name__ == "__main__":
    while True:
        print(get_word())

Post a Comment for "Python Continue From Input With The Space Key"