Function raw_input( )
doesn't works in curses mode, The getch()
method returns an integer; it represents the ASCII code of the key pressed. The will not work if you wants to scan string from prompt. You can make use of getstr
function:
Read a string from the user, with primitive line editing capacity.
There’s also a method to retrieve an entire string, getstr()
curses.echo() # Enable echoing of characters
# Get a 15-character string, with the cursor on the top line
s = stdscr.getstr(0,0, 15)
And I wrote raw_input function as below:
def my_raw_input(stdscr, r, c, prompt_string):
curses.echo()
stdscr.addstr(r, c, prompt_string)
stdscr.refresh()
input = stdscr.getstr(r + 1, c, 20)
return input # ^^^^ reading input at next line
call it as choice = my_raw_input(stdscr, 5, 5, "cool or hot?")
Edit: Here is working example:
if __name__ == "__main__":
stdscr = curses.initscr()
stdscr.clear()
choice = my_raw_input(stdscr, 2, 3, "cool or hot?").lower()
if choice == "cool":
stdscr.addstr(5,3,"Super cool!")
elif choice == "hot":
stdscr.addstr(5, 3," HOT!")
else:
stdscr.addstr(5, 3," Invalid input")
stdscr.refresh()
stdscr.getch()
curses.endwin()
output:
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…