17

Pythonモジュールでは、キーを押してから戻るcursesまでに約 1 秒の遅延があることがわかりました。この遅延は、他のキーでは発生しないようです。なぜこれが起こるのですか?どうすればよいですか?escgetch()

テストケース:

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
4

3 に答える 3

23

Esc 遅延をカスタマイズするために、環境変数 ESCDELAY を設定できます。これは、curses が Escape キーを配信する前に待機する時間をミリ秒単位で決定するために使用します。

Python でこの変数を定義するには、たとえば、を呼び出す前に次の関数を呼び出すことができますcurses.wrapper(main)

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

これにより、環境変数が以前に設定されていない場合は 25ms に設定されます。

ncurses の man ページも参照してください(ESCDELAY を検索してください)。

于 2015-01-19T08:31:56.243 に答える