2010-04-04 2 views
2

지옥 사람들, 파이썬 저주로 작업 중이며 initscr()이있는 초기 창을 가지고 있으며이를 덮어 쓸 새 창을 몇 개 만듭니다.이 창을 지우고 표준 화면을 복원 할 수 있는지 알고 싶습니다. 그것을 다시 채울 필요가있다. 방법이 있습니까? 누군가 창, 서브 윈도우, 패드 및 서브 패드의 차이점을 말할 수 있는지 물어볼 수도 있습니다.파이썬에서 저주 창을 삭제하고 백그라운드 창을 복원하려면 어떻게해야합니까?

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. 

답변

7

이, 예컨대이 작동한다 :

이 코드가이 'S'와 단말 채워

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) 

단계; 모든 키스톤에서 창을 'w'로 채 웁니다. 다음 키 스트로크에서 창을 제거하고 stdscr을 다시 표시하므로 다시 '모두'입니다. 다음 키 스트로크에서 스크립트는 끝나고 터미널은 다시 정상으로 돌아갑니다. 이게 너에게 효과가 있지 않니? 아니면 실제로 뭔가 다른 것을 원합니까?

+0

안녕하세요! 덕분에 : D, 정말 필요한 유일한 것은 "del"이었습니다. 나는 창을 지우는 방법을 모르고 있었고, 제가 가지고있는 코드에서 효과가있었습니다. 정말로 감사합니다. –

+0

나는 방황하고 있었다. 델윈윈 대신'newwin = None'을 사용할 수 있었 을까? (그래서'newwin'을 테스트 할 수 있었고,'UnboundLocalError' 또는 비슷한 것을 올리지 않았다.)? 즉,'newwin = None' 만 지정하면 파이썬 가비지 수집기가'newwin' 리소스를 적절히 처리합니까? – sdaau

+0

모든 의도와 목적으로 "del newwin"은 "newwin = None"과 기능적으로 동일합니다. 즉, "del"은 실제로 * newwin을 삭제하지 않습니다; 단지 그 특정 참조를 정리하여 참조 횟수를 하나 줄입니다. – rdb

관련 문제