views:

133

answers:

1

Hell-o guys, I'm working on python curses and I have my initial window with initscr() and I create several new windows to overlap it, I want to know if I can delete these windows and restore the standard screen without having to refill it. Is there a way? I can also ask if someone can tell me the difference between a window, subwindow, pad and sub pad.

I have this code:

stdscr = curses.initscr()

Then I fill it with random letters

stdscr.refresh() newwin=curses.newwin(10,20,5,5) newwin.touchwin() newwin.refresh()

I want to delete newwin here so that if I write stdscr.refresh() newwin won't appear

stdscr.touchwin() stdscr.refresh()

And here it should appear as if no window was created.
+1  A: 

This, e.g, should work:

import curses

def fillwin(w, c):
    y, x = w.getmaxyx()
    s = c * (x - 1)
    for l in range(y):
    w.addstr(l, 0, s)

def main(stdscr):
    fillwin(stdscr, 'S')
    stdscr.refresh()
    stdscr.getch()

    newwin=curses.newwin(10,20,5,5)
    fillwin(newwin, 'w')
    newwin.touchwin()
    newwin.refresh()
    newwin.getch()
    del newwin

    stdscr.touchwin()
    stdscr.refresh()
    stdscr.getch()

curses.wrapper(main)

This fills the terminal with 'S'; at any keystoke, it fills the window with 'w'; at the next keystroke, it removes the window and show the stdscr again, so it's again all-'S'; at the next keystroke, the script ends and the terminal goes back to normal. Isn't this working for you? Or do you actually want something different...?

Alex Martelli
Hey! thanks :D, well the only thing I really needed was de "del" I was not sure how to delete the windows, and it worked inside the code I had, thanks really.
Zloy Smiertniy
@Zloy, always happy to help, but, remember to _accept_ this answer, since it's helped you, by clicking on the checkmark-shaped icon below the big digit on the upper left of the answer.
Alex Martelli
Thanks for the tip I didn't know that
Zloy Smiertniy