getstr在python诅咒中返回一个空字符串

getstr在python诅咒中返回一个空字符串,python,curses,getstring,Python,Curses,Getstring,我正在尝试为树莓圆周率的超声波传感器做一个基本的TUI。从getstr获取用户输入时遇到问题。该程序允许您键入和输入值,但返回空字符串。以下是该界面的代码: def interface(inputs): screen = curses.initscr() curses.noecho() screen.border(0) screen.keypad(1) screen.nodelay(0) dim = screen.getmaxyx() se

我正在尝试为树莓圆周率的超声波传感器做一个基本的TUI。从getstr获取用户输入时遇到问题。该程序允许您键入和输入值,但返回空字符串。以下是该界面的代码:

def interface(inputs):
    screen = curses.initscr()
    curses.noecho()
    screen.border(0)
    screen.keypad(1)
    screen.nodelay(0)
    dim = screen.getmaxyx()
    selection = -1
    if inputs == 0: 
        option = 0
    elif inputs == 1:
        option = 1
    elif inputs == 2:
        option = 2
    elif inputs == 3:
        option = 3
    while selection < 0:
        graphics = [0]*5
        graphics[option] = curses.A_REVERSE
        screen.addstr(2, dim[1]/2-15, 'ULTRASONIC DISTANCE SENSOR 1.0', curses.A_BOLD)
        screen.addstr(10, 10, 'Number of pings: ', graphics[0])
        screen.addstr(11, 10, 'Number of seconds between pings: ', graphics[1])
        screen.addstr(12, 10, 'Number of seconds before starting: ', graphics[2])
        screen.addstr(13, 10, 'Start', graphics[3])
        screen.addstr(14, 10, 'Exit', graphics[4])
        action = screen.getch()
        if action == curses.KEY_UP:
            option = (option - 1) % 5
        elif action == curses.KEY_DOWN:
            option = (option + 1) % 5
        elif action == ord('\n'):
            selection = option
    if selection == 0:
        curses.echo()
        pings = screen.getstr(10, 27, 3)
        screen.addstr(10, 30, pings)
        screen.refresh
        pings = int(pings)
        curses.noecho()
        curses.endwin()
        interface(0)
    elif selection == 1:
        curses.echo()
        seconds = screen.getstr(11, 43, 3)
        seconds = int(seconds)
        curses.noecho
        interface(1)
    elif selection == 2:
        curses.echo()
        bstart = screen.getstr(12, 45, 3)
        bstart = int(bstart)
        curses.noecho
        interface(2)
    elif selection == 3:
        window = curses.newwin(20, 40, 10, dim[1]/2+5)
        window.border(0)
        wdim = window.getmaxyx()
        window.addstr(1, wdim[1]/2-6, "Measurements")
        window.refresh()
        time.sleep(bstart)
        for y in range(pings):
            window.clear()
            window.addstr(y, 0, 'ping')
            window.refresh()
            time.sleep(0.1)
        screen.getch()
        curses.endwin()
    elif selection == 4:
        curses.endwin()
    curses.endwin()

这段代码还存在一些其他问题,使其无法工作,例如,递归调用接口意味着在每次选择结束后都会重复调用endwin。但是如果你解决了所有其他问题,getstr工作得很好。谢谢你,abarnet,我通过将curses.endwin移到函数之外解决了这个问题。