多次打印相同的curses - python

时间:2017-06-26 03:21:32

标签: python curses python-curses

我正在使用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),值从窗口中删除,并且它返回到“正常终端模式”,我不知道为什么。

我想更新数据,同时保持这个'请帮助我'的消息&数据显示。

我认为我可以使用线程来解决这个问题但是,因为完整的代码要复杂得多,所以我想避免使用线程。

我该如何解决这个问题?

1 个答案:

答案 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,没有这个缺点。