盒子诅咒中的功能
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
)重绘并覆盖框。
这是一个修改后的例子,它使方框成为 win
的 subwindow,并且(顺便说一句)将计时器从方框边框:
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
调用,屏幕将使用黑底白字。但是正确使用颜色将是另一个问题。
那里。谁能告诉我我在代码中做错了什么?为什么定时器功能没有出现在框中?
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
)重绘并覆盖框。
这是一个修改后的例子,它使方框成为 win
的 subwindow,并且(顺便说一句)将计时器从方框边框:
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
调用,屏幕将使用黑底白字。但是正确使用颜色将是另一个问题。