盒子诅咒中的功能

Function in a box 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()

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

开始

由于以下两个原因,计时器没有出现在框中:

  • 定时器写错了window,

  • 您正在阅读的window(使用getch)重绘并覆盖框。

这是一个修改后的例子,它使方框成为 winsubwindow,并且(顺便说一句)将计时器从方框边框:

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 这样做。如果删除 initscr 调用,屏幕将使用黑底白字。但是正确使用颜色将是另一个问题。