2012-05-29 158 views
3

我的代碼看起來像這樣:回調與Python詛咒

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

您可以嘗試使用Urwid

Urwid在curses之上提供了一個更高級的工具包,幷包含一個事件循環來處理鍵盤和鼠標輸入。它要麼使用它自己的基於選擇的事件循環,要麼可以鉤入gevent或Twisted。

除了高效地處理鍵盤輸入,您還可以通過編輯框,列表控件等處理用戶輸入的多種選項。

1

如何使用半延遲模式使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()