2015-03-02 2 views
0

Я немного новичок в python и curses, так что было несколько вопросов. Я делаю терминальное приложение, которое использует curses для генерации ui. Я пытаюсь сделать что-то похожее на программу linux top за исключением того, что он извлекает данные из XML-файла. У меня есть этот код, который я изменяю из предыдущего вопроса stackoverflow. Для упрощения вещей динамическое значение, которое я обновляю здесь, - это просто время. Мои два вопроса:python curses динамическое значение + пользовательский ввод

  1. У меня есть x = screen.getch(7,2), чтобы проверить, хочет ли пользователь выйти. Подобно top, если пользователь может ввести «q» для выхода. Однако из-за этого обновляются значения времени arent. Как я могу получить пользовательский ввод, а также динамическое обновление значений. Когда я комментирую screen.getch, значения начинают обновляться. Ive прочитал, что top использует версию C curses, так что это должно быть возможно, просто нужна помощь в правильном направлении.
  2. Мой второй вопрос касается частоты обновления. Есть ли способ контролировать это с помощью проклятий api? Легкий способ, которым я решил это сделать, это использовать команду time.sleep(), но я не был уверен, что это правильный путь. В идеале я хотел бы обновить это новыми xml-данными каждые 60 секунд или около того.

Я видел это Python/curses user input while updating screen в stackoverflow и думаю, что вопрос подобен, но я был немного перегружен кодом. Я до сих пор не понимаю классы и не могу следовать логике. Я искал что-то простое. Я считаю, что парень закончил использование line = sys.stdin.read(1), чтобы запустить его код. Мне не повезло при использовании этого вместо getch. Я получил некоторую ошибку о том, что x не может использовать strip().

from os import system 
import curses 
import time 

x = 0 

while x != ord('q'): 
    screen = curses.initscr() 
    curses.curs_set(False) 
    screen.clear() 
    screen.border(0) 
    screen.addstr(1, 2, "BLAH BLAH ", 
       curses.A_REVERSE) 

    ltime = time.asctime(time.localtime(time.time())) 

    screen.addstr(3, 2,'BLAH1: ' + ltime)  
    screen.addstr(4, 2, "BLAH2") 

    screen.refresh() 

    x = screen.getch(7,2) 


curses.endwin() 
+0

Вы должны прочитать [Python Docs Curses Tutorial] (https://docs.python.org/2/howto/curses.html) и [window.nodelay] (https://docs.python.org/ 2/library/curses.html # curses.window.nodelay) в частности. – msw

+0

спасибо, что помогло. Я просмотрел учебник раньше, и у него не было много примеров. просто описание функций. – jti107

ответ

1

на основе некоторых замечаний я добавил screen.nodelay(True) сразу после screen=curses.initscr() и смог заставить его работать.

Смежные вопросы