3

次のようなコードがあります。

stdscr.nodelay(1)
while True:
    c = stdscr.getch()
    if c != -1:
        stdscr.addstr("%s was pressed\n" % c)
    if time() - last > 1:
        stdscr.addstr("time() == %s\n" % str(time()))
        last = time()

しかし、私のコードが本当に無駄/非効率的ではないかと心配しています。curses で使用できるコールバック メカニズムはありますか? そうでない場合、この種の状況を処理する標準的な方法は何でしょうか?

4

2 に答える 2

5

代わりにUrwidを試すことができます。

Urwid は、curses の上に高レベルのツールキットを提供し、キーボードとマウスの入力を処理するためのイベント ループを含みます。独自の選択ベースのイベント ループを使用するか、gevent または Twisted にフックできます。

キーボード入力を効率的に処理するだけでなく、編集ボックス、リスト コントロールなどでユーザー入力を処理するためのオプションも多数用意されています。

于 2012-05-29T11:55:44.170 に答える
2

半遅延モードを使用して getch() をブロックするのはどうですか?

import time
import curses

stdscr = curses.initscr()
curses.halfdelay(10) # 10/10 = 1[s] inteval

try:
    while True:
        c = stdscr.getch()
        if c != -1:
            stdscr.addstr("%s was pressed\n" % c)
        stdscr.addstr("time() == %s\n" % time.time())
finally:
    curses.endwin()
于 2012-05-29T12:02:40.597 に答える