2012-05-29 3 views
3

У меня есть код, который выглядит следующим образом:Callbacks с 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() 

Однако, я беспокоюсь, что мой код действительно расточительно/неэффективно. Существует ли механизм обратного вызова для проклятий? Если нет, каков был бы канонический способ справиться с такой ситуацией?

ответ

4

Вместо этого вы можете попробовать Urwid.

Urwid предоставляет инструментарий более высокого уровня поверх проклятий и включает в себя цикл событий для обработки ввода клавиатуры и мыши. Он либо использует свой собственный цикл событий на основе выбора, либо может подключаться к 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()