2010-04-04 15 views
2

Hell-o les gars, je travaille sur les malédictions python et j'ai ma fenêtre initiale avec initscr() et je crée plusieurs nouvelles fenêtres pour le chevaucher, je veux savoir si je peux supprimer ces fenêtres et restaurer l'écran standard sans avoir à le remplir. Y a-t-il un moyen? Je peux aussi demander si quelqu'un peut me dire la différence entre une fenêtre, sous-fenêtre, pad et sous-pad.Comment supprimer une fenêtre de malédiction en python et restaurer la fenêtre d'arrière-plan?

J'ai ce 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. 

Répondre

7

Ce, par exemple, devrait fonctionner:

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) 

Cela remplit le terminal avec 'S'; à n'importe quel keystoke, il remplit la fenêtre avec 'w'; à la frappe suivante, il supprime la fenêtre et affiche à nouveau le stdscr, donc c'est à nouveau all-'S '; à la frappe suivante, le script se termine et le terminal revient à la normale. Cela ne fonctionne-t-il pas pour vous? Ou voulez-vous réellement quelque chose de différent ...?

+0

Salut! merci: D, eh bien la seule chose dont j'avais vraiment besoin était de "del" Je n'étais pas sûr de savoir comment supprimer les fenêtres, et cela fonctionnait dans le code que j'avais, merci vraiment. –

+0

J'étais errant - pourrait-on utiliser 'newwin = None', au lieu de' del newwin' (donc on pourrait tester 'newwin', sans augmenter' UnboundLocalError' ou similaire)? Autrement dit, le garbage collector Python disposerait-il correctement des ressources 'newwin', si seulement' newwin = None' est spécifié? – sdaau

+0

Pour toutes fins utiles, "del newwin" est fonctionnellement équivalent à "newwin = None". C'est-à-dire que "del" ne supprime pas réellement * newwin; il nettoie simplement cette référence particulière, en réduisant son compte de référence par un. – rdb