2013-10-25 4 views
0

이 클래스의 drawWorld() 함수를 호출하는 외부 스크립트가 있습니다. 도면을 1-2 초 동안 표시 한 다음 닫고 제어 도구가 기본 스크립트로 돌아 가기를 원합니다. 나는 윈도우 라인Tkinter 창이 닫히고 제어 흐름이 자동으로 반환됩니다.

root.after(1000, lambda: root.destroy()) 

사라하지만 메인 스크립트에 흐름을 반환 할 수 있도록 관리 할 수 ​​있습니다. 나는

root.after(1000, lambda: root.quit()) 

을 시도했지만 작동하지 않습니다. 당신이 당신의 메인 프로그램이 바로 이것이다 썼다 질문에 대한 코멘트에서

from Tkinter import Tk, Canvas, Frame, BOTH 

class World(Frame): 

def __init__(self, parent): 
    Frame.__init__(self, parent) 
    self.parent = parent    
    self.parent.title("CliffWorld")   
    self.pack(fill=BOTH, expand=1) 

    canvas = Canvas(self)   

    canvas.create_rectangle(4, 4, 31, 31, 
     outline="#f11", fill="#1f1", width=1) 
    canvas.pack(fill=BOTH, expand=1) 


def drawWorld(): 
    root = Tk() 
    ex = World(root) 
    root.geometry("330x220+300+300") 
    root.after(1000, lambda: root.destroy()) 
    root.after(1000, lambda: root.quit()) 
    root.mainloop() 
+0

"메인 스크립트로 흐름을 되돌릴 수 없지만 작동하지 않습니다." 평균? 그것은 추락합니까? 프로그램이 멈 춥니 다? 오류 메시지가 나타 납니까? 전체 문제를 설명하는 최소한의 스크립트를 제공 할 수 있습니까?이 함수를 호출 한 다음 함수가 종료 될 때 계속 시도하는 절차 코드? –

+0

주 스크립트는 drawWorld() 함수를 호출하므로 제어 흐름이 코드의이 부분으로 이동합니다. root.destroy()를 사용하여 창을 제거하고 작동하지만, tk 환경을 종료하고 나머지 스크립트를 실행하게하는 root.quit()은 그렇지 않습니다. 지정하지 않은 것에 대해 유감스럽게 생각하지만 나는 일하지 않는 것을 의미합니다. 기본적으로 수동으로 종료 할 때까지 열려 있습니다 (Ctrl-C). 내 외부 코드는 간단합니다 : 'import tkWorld tkWorld.drawWorld(); print "end"' 인쇄 라인에 연결할 수 없습니다. 1 초 후에 tk 창이 튀어 나오고 죽기를 바란다. – Alvin

+0

예제에서 들여 쓰기가 잘못되었습니다. –

답변

0

:

이는 Tkinter를 클래스 내 코드입니다

import tkWorld 
tkWorld.drawWorld() 
print "end" 

내가 사용하는 프로그램에서 , 들여 쓰기를 수정 한 후 예제 코드를 사용하면 잘 작동합니다. 창문이 1 초 동안 나타나면 사라지고 콘솔에 "end"라고 출력됩니다.

람다가 root.quit() 또는 root.destroy()을 호출하는지 여부에 관계없이 작동합니다.

from Tkinter import Tk, Canvas, Frame, BOTH 

class World(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent    
     self.parent.title("CliffWorld")   
     self.pack(fill=BOTH, expand=1) 

     canvas = Canvas(self)   

     canvas.create_rectangle(4, 4, 31, 31, 
      outline="#f11", fill="#1f1", width=1) 
     canvas.pack(fill=BOTH, expand=1) 


def drawWorld(): 
    root = Tk() 
    ex = World(root) 
    root.geometry("330x220+300+300") 
    root.after(1000, lambda: root.destroy()) 
    root.after(1000, lambda: root.quit()) 
    root.mainloop() 

if __name__ == "__main__": 
    import tkWorld 
    tkWorld.drawWorld() 
    print "end" 
+0

Bryan, 고맙습니다. 다른 컴퓨터에서 시도해 보았습니다. 나는 내 문제가 될 수있는 것에 대해 지금 염려하고있다. 어쨌든 고맙습니다! – Alvin