Search code examples
pythonwindowcurses

How do I delete a curse window in python and restore background window?


I'm working on python curses and I have an initial window with initscr(). Then 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? Could someone 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.

Solution

  • 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...?