python curses动态值+用户输入

时间:2015-03-02 18:25:26

标签: python curses

我对python和curses有点新意,所以有几个问题。我正在制作一个使用curses生成ui的终端应用程序。我试图制作类似于linux程序 top 的东西,除了它从xml文件中获取数据。我有这个代码,我从以前的stackoverflow问题修改。为了简化事物,我在这里更新的动态值就是时间。我的两个问题如下:

  1. 我有x = screen.getch(7,2)来检查用户是否要退出。与top类似,如果用户可以键入" q"退出。但是由于这个原因,时间值没有更新。如何使用用户输入以及值的动态更新。当我注释掉screen.getch时,值开始更新。我已经读过 top 正在使用C版本的curses,所以这应该是可行的,只需要一个正确方向的帮助。
  2. 我的第二个问题是刷新率。有没有办法使用curses api来控制它?我认为这样做的简单方法是使用time.sleep()命令,但我不确定这是否是正确的方法呢?理想情况下,我希望每60秒左右用新的xml数据更新一次。
  3. 我确实在stackoverflow中看到了这个Python/curses user input while updating screen,我认为问题类似,但我对代码有点不知所措。我还没有真正理解课程,也无法遵循逻辑。我在寻找简单的东西。我相信那个人最终使用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()
    

1 个答案:

答案 0 :(得分:2)

根据我在screen.nodelay(True)之后添加screen=curses.initscr()的一些评论,并且能够让它发挥作用。