2015-02-04 2 views
1

Как обновить экран или дождаться нажатия клавиши одновременно? Я использую unicurses на Python, но я думаю, что я бы с той же проблемой в С. Вот что я хочу сделать в псевдокоде:Использование проклятий, как мне обновить экран или дождаться нажатия клавиши?

function startScreen(){ 
    stdscr = initscr() 
    while True{ 
     - Update screen using a variable that is constantly changing (probably by a thread, right?) 
     - Get a key with getch() - to close or interact with the screen 
    } 
} 

Моя проблема заключается в том, что экран не обновляется, если что-то не происходит , например, изменение размера экрана или нажатие клавиши. Я думал об использовании цикла while (и time.sleep (1)?) Для обновления экрана и потока для ожидания ключей. Это возможно? Я мало знаю о потоках, поэтому я спрашиваю. Есть ли более простой способ?

спасибо.

ответ

2

Это может быть сделано без сложной многопоточной обработки. Существует функция curses.halfdelay, которая также может быть найдена в библиотеке unicurses, которую вы используете. Требуется количество десятых долей секунды, чтобы дождаться продолжения. https://docs.python.org/3/library/curses.html#curses.halfdelay

Вот пример кода, который обновляется каждые полсекунды, если только не была нажата кнопка, и в этом случае она немедленно обновляется.

import curses 
scr = curses.initscr() 
curses.halfdelay(5)   # How many tenths of a second are waited, from 1 to 255 
curses.noecho()    # Wont print the input 
while True: 
    char = scr.getch()  # This blocks (waits) until the time has elapsed, 
           # or there is input to be handled 
    scr.clear()    # Clears the screen 
    if char != curses.ERR: # This is true if the user pressed something 
     scr.addstr(0, 0, chr(char)) 
    else: 
     scr.addstr(0, 0, "Waiting") 
+0

Отлично! Большое спасибо! – SadSeven

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