在pythoncurses模块中,我观察到在按Esc键和返回之间有大约1秒钟的延迟。对于其他键,似乎不会发生这种延迟。为什么会发生这种情况,我该怎么办?
测试用例:

import curses
import time

def get_delay(window, key):
    while True:
        start = time.time()
        ch = window.getch()
        end = time.time()
        if ch == key:
            return end-start

def main(stdscr):
    stdscr.clear()
    stdscr.nodelay(1)

    stdscr.addstr("Press ESC")
    esc_delay = get_delay(stdscr, 27)

    stdscr.addstr("\nPress SPACE")
    space_delay = get_delay(stdscr, ord(' '))

    return esc_delay, space_delay

if __name__ == '__main__':
    esc_delay, space_delay = curses.wrapper(main)
    print("Escape delay: {} ms".format(esc_delay*1000))
    print("Space delay: {} ms".format(space_delay*1000))

结果:
Escape delay: 1001.09195709 ms
Space delay: 0.00596046447754 ms

最佳答案

为了自定义esc延迟,可以设置环境变量esc delay,curses使用它来确定在传递escape键之前等待的时间(毫秒)。
为了在python中定义这个变量,您可以在调用curses.wrapper(main)之前调用以下函数:

def set_shorter_esc_delay_in_os():
    os.environ.setdefault('ESCDELAY', '25')

如果以前没有设置环境变量,它会将环境变量设置为25毫秒。
另请参见man page of ncurses(搜索escdelay)。

关于python - 为什么转义键在Python curses中有延迟?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27372068/

10-15 08:53