2017-04-13 63 views
-1

那里。任何人都可以告诉我我在代码中做了什么错误吗?为什么计时器功能没有出现在框中?函数在一个盒子里curses

import curses 
from datetime import datetime 

stdsrc= curses.initscr() 

SPACE_KEY = ord(' ') 

box1 = curses.newwin(20, 30, 10, 10) 
box1.box() 
def run(win): 

    win.timeout(1000) 
    start = datetime.now() 
    while True: 
     now = datetime.now() 
     minutes, seconds = divmod((now - start).total_seconds(), 60) 
     win.addstr(0, 0, "%02d:%02d" % (minutes, round(seconds))) 

     c = win.getch() # c variable to get user character 
     if c == SPACE_KEY: 
      break 

box1.refresh() 

curses.wrapper(run) 

curses.endwin() 

回答

0

addstr的前两个参数是开始文本的坐标。在您的代码中,您将在坐标0,0处开始文本,而您的框从坐标20,30开始。

0

计时器不会出现,因为这两个原因的对话框:

  • 计时器被写入错误的窗口,并

  • 窗口您(使用getch)阅读重新绘制并覆盖该框。

这里是一个修改后的例子,这使得盒子一个子窗口的win,和(方式)从框的边框移动计时器远:

import curses 
from datetime import datetime 

SPACE_KEY = ord(' ') 

def run(win): 
    box1 = win.subwin(20, 30, 10, 10) 
    box1.box() 

    win.timeout(1000) 
    start = datetime.now() 
    while True: 
     now = datetime.now() 
     minutes, seconds = divmod((now - start).total_seconds(), 60) 
     box1.addstr(1, 1, "%02d:%02d" % (minutes, round(seconds))) 
     box1.refresh() 

     c = win.getch() # c variable to get user character 
     if c == SPACE_KEY: 
      break 

stdsrc = curses.initscr() 
curses.wrapper(run) 

initscr的呼叫是不必要; curses.wrapper这样做。如果您删除该呼叫,屏幕将使用白底黑字。但正确的颜色将是另一个问题。

+0

嗨,非常感谢。现在它的工作原理就是我需要调整盒子的坐标和像@maxymoo这样的计时器。 Box1不应该从坐标20,30开始,因为它不在计时器的坐标(1,1)之内。所以,我所做的是将box1的坐标设置为0,0和计时器设置为10,20(靠近盒子中间的某个位置)。你还可以推荐一些书籍或任何网站,让我学习这个诅咒,因为我对此很陌生? – user7519

相关问题