2014-09-28 8 views
-1

40 단어 내에서 중복을 검사하는 class Duplicates이 있습니다.python tkinter Toplevel .destroy()와 .quit()가 의도 한대로 작동하지 않습니다.

나는 class Window을 생성하고 메인 윈도우를 실행하여 결과를 게시합니다.

사용자에게 가능한 이중으로 수행 할 작업을 묻는 경우 최상위 창을 만드는 class popWindow이 있습니다.

일단 선택 사항이 제출되면 popWindow을 닫는 것이 좋습니다.

버전 실제로 버전이 표시되고 aswer (표시된 중복 텍스트가있는 텍스트)를 사용하면 창을 종료하여 팝업이 계속 나타나거나 단순히 완료 될 때까지 여러 개의 팝업이 표시됩니다.

class Duplicates: 

    def markWord(self): 
     self.appendMarkedWord(self.word) 
     self.checked.append(self.word) 
     self.pop.topLevel_exit() 
     return "" 

class popUpWindow: 

    temp = Button(self, font = 8, 
         text = "Allowed this run only", 
         command = app.newFile.markWord 
         ) 
    temp.place(x = 178, 
       y = 55 
       ) 

내가 대신 .destroy()에게 윈도우 닫힌다를 사용하지만 프로그램이 중지 실행하고 더 나쁜 경우.

어떻게하면이 창을 닫을 수 있지만 여전히 프로그램을 실행하려면이 문제를 해결하려면 어떻게합니까?

많은 시간이 지난 후에 destroy()가 내 popUpWindow.mainloop()을 중지시키지 않았으므로 이제는 종료 코드를 변경 한 다음 destroy()를 수행하도록 변경했습니다. 이것은 내가 예제로 보았던 것이 아니며 최상위 mainloop의 destroy()가 그것을 종료하지 않는 것으로 보인다. destroy()는 내 root.mainloop에서 잘 작동한다.)

def topLevel_exit(self): 
    self.pop.quit() 
    self.pop.destroy() 

답변

2

최상위 창에서 destroy()을 호출하면 응용 프로그램이 실행되지 않습니다. 응용 프로그램이 중지되면 코드에 대한 정보가 있어야합니다. 질문이 없다면 팝업을 없애는 올바른 방법은 Toplevel의 인스턴스에서 destroy으로 전화하는 것입니다.

+0

을 선호하는 내 창 CIA 요원을 사용하여 응용 프로그램을 시작 작동합니다 ss 그리고 거기에서 나는 객체를 Duplicates로 만들거나 좀 더 정확하게하기 위해 __init__에 None을 넣었습니다. 그러나 새로운 파일을 만들 때 만들어졌습니다. Duplicates 내에서 popwindow의 인스턴스를 생성하여 주 윈도우가 인터럽트되는 이유를 이해할 수 없습니다. 이후 popWindow를 윈도우 내의 메소드로 사용하려고 시도했지만 popwindow를 파괴하자마자 종료됩니다. 필자는 tkinter, python threading 또는 둘다를 이해하지 못한다. – enno4859

+0

@ enno4859 : 스레드를 사용하고 있습니까? 메인 루프를 두 번 이상 부르시겠습니까? 그것들은 당신이 당신의 질문에서 빠뜨린 중요한 세부 사항입니다. –

+0

예 사용자로부터의 입력을 기다릴 수 있도록 상단 창에 대한 두 번째 메인 루프입니다. – enno4859

0

창을 숨기고 프로그램 실행 창에 .withdraw()을 사용하는 것입니다 유지하고, (필요한 경우) .reiconify()가 다시 얻을 수있는 방법. 또는 Toplevel 창에서 .destroy()을 사용할 수 있습니다. 예를 들어 질문 할 필요가 있다면, 이것이 당신을 도울 수 있기를 바랍니다.

0

나를 위해이 솔루션은이었다

def topLevel_exit(self): 
    self.top.quit() 
    self.top.destroy() 

이 공통의 실천을하지만 만약 내가 모르는 당신이 경우 내 top.mainloop()

+0

당신이 말하는 것은 많은 의미가 없습니다. 당신은'destroy()'가 mainloop을 멈추지 않을 것이라는 점에 틀림 없습니다. 프로그램을 종료 할 때까지 메인 루프를 멈추고 싶지는 않습니다. 하나 이상의 메인 루프를 운영하고 있습니까? 아마도 그것은 당신의 문제의 진정한 뿌리입니다. –

+0

예 최상위 창에 대한 top.mainloop. 내가 mainloop을 가지고 있지 않다면 사용자로부터의 입력을 기다리지 않을 것이다. – enno4859

0

을을 stoping되지 않았습니다 파괴 이후 내가해야 할 일을했을 것입니다 당신이 돌이() 을 사용하는 등 톱 레벨의 윈도우를 사용, self.pop.destroy()은 아직 그렇지 않으면 quit() 또는 둘 모두를 사용하지만이 모든 내 의견으로는, 내가 destroy()