【问题标题】:Function in a box curses盒子里的功能诅咒
【发布时间】:2017-04-13 03:51:48
【问题描述】:

那里。谁能告诉我我在代码中做错了什么?为什么计时器功能没有出现在框中?

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()

【问题讨论】:

    标签: python ncurses curses python-curses


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      • 您正在阅读的窗口(使用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 就是这样做的。如果您删除 initscr 调用,屏幕将使用黑底白字。但是正确的颜色将是另一个问题。

      【讨论】:

      • 嗨,非常感谢。它现在可以工作了,我需要像上面提到的@maxymoo 一样调整盒子和计时器的坐标。 Box1 不应从 20, 30 的坐标开始,因为它在计时器 (1, 1) 的坐标之外。所以,我所做的就是将 box1 的坐标设置为 0, 0 并将计时器设置为 10, 20(接近盒子中间的某个位置)。您还可以推荐一些可以让我学习这种诅咒的书籍或任何网站,因为我对此很陌生?
      猜你喜欢
      • 2021-08-15
      • 1970-01-01
      • 2010-11-21
      • 2012-04-08
      • 2014-04-23
      • 1970-01-01
      • 2013-11-22
      • 2011-06-08
      • 1970-01-01
      相关资源
      最近更新 更多