为什么我不能在python curses窗口中将lasttr()添加到最后一行/ col?

wuf*_*foo 7 python curses

使用Python,我试图使用addstr()将光标位置写入我的curses窗口的右下角但是我收到错误.ScreenH-2工作正常,但从挡风玻璃底部打印到第二行. ScreenH-1根本不起作用.我究竟做错了什么?

import curses

ScreenH = 0
ScreenW = 0
CursorX = 1
CursorY = 1

def repaint(screen):   
   global ScreenH
   global ScreenW
   global CursorX
   global CursorY

   ScreenH, ScreenW = screen.getmaxyx()
   cloc = '   ' + str(CursorX) + ':' + str(CursorY) + ' '
   cloclen =  len (cloc)
   screen.addstr (ScreenH - 1, ScreenW - cloclen, cloc,  curses.color_pair(1));


def Main(screen):
   curses.init_pair (1, curses.COLOR_WHITE, curses.COLOR_BLUE)
   repaint (screen)   

   while True:
      ch = screen.getch()
      if ch == ord('q'):
         break

      repaint (screen)     


curses.wrapper(Main)

  File "test.py", line 17, in repaint
    screen.addstr (ScreenH - 1, ScreenW - cloclen, cloc,  curses.color_pair(1));
_curses.error: addstr() returned ERR
Run Code Online (Sandbox Code Playgroud)

Mes*_*ion 13

您也可以使用insstr而不是addstr:

screen.insstr(ScreenH - 1, ScreenW - 1 - cloclen, cloc,  curses.color_pair(1))
Run Code Online (Sandbox Code Playgroud)

这将阻止滚动,从而允许您打印最后一行中的最后一个字符


fal*_*tru 1

您需要像计算高度一样从宽度中减去 1。否则字符串将超出屏幕的宽度。

screen.addstr(ScreenH - 1, ScreenW - 1 - cloclen, cloc,  curses.color_pair(1))
                                   ^^^
Run Code Online (Sandbox Code Playgroud)

  • @wufoo,因为除非您调用“screen.scrollok(1)”,否则它将导致滚动被禁用。 (3认同)