2015-03-02 64 views
0

我对python和curses有点新,所以有几个问题。我正在制作一个使用curses生成ui的终端应用程序。我试图做一些类似于Linux程序top,只是它从XML文件中提取数据。我有这个代码,我从以前的计算器问题修改。为了简化事情,我在这里更新的动态值只是时间。我的两个问题如下:python curses动态值+用户输入

  1. 我有x = screen.getch(7,2)来检查用户是否要退出。与top类似,如果用户可以输入“q”退出。但是由于这个原因,时间值并没有被更新。我如何获得用户输入以及值的动态更新。当我注释掉screen.getch时,值开始更新。我读过top正在使用curses的C版本,所以这应该是可能的,只需要在正确的方向上提供帮助。
  2. 我的第二个问题是关于刷新率。有没有办法使用curses api来控制它?我认为这样做的简单方法是使用time.sleep()命令,但我不确定这是否是正确的方法?理想情况下,我想每60秒左右更新一次新的xml数据。

我确实在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() 
+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 2015-03-02 18:45:32

+0

感谢帮助。我之前浏览过这个教程,它并没有很多例子。只是对功能的描述。 – jti107 2015-03-02 19:46:15

回答

1

基于一些意见,我的screen=curses.initscr()之后加入screen.nodelay(True)并能够得到它的工作。