Question

I want to add str "#" in ncurse screen,with coordinate x(5 to 24), y(23 to 42) which is a square. But I can't figure out a simple way to do it.

I've tried:

stdscr.addstr(range(23,42),range(5,24),'#')

But this can't work. It needs 'integer'.

Does anyone can figure out an easy way to do this Job?

Thanks.

Was it helpful?

Solution

First two arguments of addstr should be row, col as integer but your are passing list:

To make square to like this:

for x in range(23,42): # horizontal c 
  for y in range(5,24): # verticale r
    stdscr.addstr(y, x, '#')        

To fill colors, blinking, bold etc you can use attribute filed in function:

from curses import *
def main(stdscr):
    start_color()
    stdscr.clear()  # clear above line. 
    stdscr.addstr(0, 0, "Fig: SQUARE", A_UNDERLINE|A_BOLD)    
    init_pair(1, COLOR_RED, COLOR_WHITE)
    init_pair(2, COLOR_BLUE, COLOR_WHITE)
    pair = 1
    for x in range(3, 3 + 5): # horizontal c 
      for y in range(4, 4 + 5): # verticale r
        pair = 1 if pair == 2 else 2
        stdscr.addstr(y, x, '#', color_pair(pair))
    stdscr.addstr(11, 0, 'Press Key to exit: ')
    stdscr.refresh()
    stdscr.getkey()    
wrapper(main)

Output:

output

Old-answer:

Do like this for diagonal:

for c, r in zip(range(23,42), range(5,24)) :
  stdscr.addstr(c, r, '#')      

Code example to fill diagonal:

code x.py

from curses import wrapper
def main(stdscr):
    stdscr.clear()  # clear above line. 
    for r, c in zip(range(5,10),range(10, 20)) :
      stdscr.addstr(r, c, '#')  
    stdscr.addstr(11, 0, 'Press Key to exit: ')
    stdscr.refresh()
    stdscr.getkey()

wrapper(main)

run: python x.py, then you can see:

output

To make a Square do like:

from curses import wrapper
def main(stdscr):
    stdscr.clear()  # clear above line. 
    for r in range(5,10):
      for c in range(10, 20):
        stdscr.addstr(r, c, '#')        
    stdscr.addstr(11, 0, 'Press Key to exit: ')
    stdscr.refresh()
    stdscr.getkey()

wrapper(main)

Output:

square

PS: from your code it looks like you wants to fill diagonal, so I edited answer later for square.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top