我正在使用curses显示一些流程统计信息。我刚接触这个库,所以我跟着this example来实现我需要的东西。
我写这个小版本总结了我的问题:
import time
import curses
def draw_menu(stdscr):
global data
# Turn cursor off
curses.curs_set(False)
# Rendering text
stdscr.addstr(2, 5, "Help me please")
stdscr.addstr(5, 5, data)
# Refresh the screen
stdscr.refresh()
time.sleep(3)
data = 'some initial value'
for i in xrange(2):
curses.wrapper(draw_menu)
# Do some stuff to update values shown in the menu
data = 'updated value {}'.format(i)
time.sleep(3)
初次调用draw_menu后,我需要更新菜单上显示的值。当更新正在运行时(在本例中我使用了time.sleep),值从窗口中删除,并且它返回到“正常终端模式”,我不知道为什么。
我想更新数据,同时保持这个'请帮助我'的消息&数据显示。
我认为我可以使用线程来解决这个问题但是,因为完整的代码要复杂得多,所以我想避免使用线程。
我该如何解决这个问题?
答案 0 :(得分:0)
你的例子应该把循环放在curses.wrapper的调用中,例如像
这样的东西import curses
def draw_menu(stdscr):
global data
# Turn cursor off
curses.curs_set(False)
# Rendering text
stdscr.addstr(2, 5, "Help me please")
stdscr.addstr(5, 5, data)
# Refresh the screen
stdscr.refresh()
curses.napms(3000)
def draw_menu_loop(w):
global data
data = 'some initial value'
for i in xrange(2):
draw_menu(w)
# Do some stuff to update values shown in the menu
data = 'updated value {}'.format(i)
curses.napms(3000)
curses.wrapper(draw_menu_loop)
顺便说一句(实际上应该是一个新问题),您的示例使用了time.sleep
,这会干扰对屏幕的及时更新。使用curses.napms
,没有这个缺点。