2016-12-29 4 views
1

나는 파이썬을 가르치려고 어리석은 질문 일지 모른다는 사과를하지만, 며칠 동안 나를 미치게 만들었다. 나는 같은 주제에 대한 다른 질문을 보았으나 여전히이 문제를 해결할 수있는 것 같지 않습니다.Toplevel Tkinter 창 닫기

사용자에게 프롬프트를 요청하는 최상위 창을 만들었으며 사용자가 원하는 버튼을 누르면 창을 닫으려고합니다. 이것은 문제가있는 곳입니다. 사랑이나 돈으로 마감 할 수 없습니다. 내 코드는 아래에 포함되어 있습니다.

도움을 주셔서 대단히 감사드립니다. 내가 해봤

from Tkinter import * 

root = Tk() 

board = Frame(root) 
board.pack() 

square = "Chat" 
cost = 2000 

class buyPrompt: 

     def __init__(self): 
      pop = Toplevel() 

      pop.title("Purchase Square") 

      Msg = Message(pop, text = "Would you like to purchase %s for %d" %       (square, cost)) 
      Msg.pack() 


      self.yes = Button(pop, text = "Yes", command = self.yesButton) 
      self.yes.pack(side = LEFT) 
      self.no = Button(pop, text = "No", command = self.noButton) 
      self.no.pack(side = RIGHT) 

      pop.mainloop() 
     def yesButton(self): 
         return True 
         pop.destroy 
     def noButton(self): 
         return False 

내가 pop.destroy을하고 꽤 몇 가지 방법을 시도했지만 아무도 제대로 작동하지 것입니다;

pop.destroy() 
pop.destroy 
pop.exit() 
pop.exit 

답변

2

를 호출하는 방법은 pop 객체에, 참으로 destroy이다 주셔서 감사합니다.

그러나 yesButton 방법의 경우 pop은 알려지지 않은 것을 말합니다.

self.pop = Toplevel() 

이 그런 다음 yesButton 방법의 내부는 self.pop 개체에 destroy 메소드를 호출 개체를 초기화 할 때

__init__ 방법, 당신은 self의 속성으로 pop 항목을 넣어해야합니다 : 0123의 차이에 대해

self.pop.destroy() 

pop.destroy() :

파이썬에서는 거의 모든 것이 객체입니다. 그래서 방법도 객체입니다.

pop.destroy을 쓸 때 destroy이라는 메서드 개체를 참조하고 pop 개체에 속합니다. 그것은 기본적으로 1 또는 "hello"을 작성하는 것과 같습니다 : 진술이 아니거나 원하는 경우 조치이 아닙니다. 당신이 pop.destroy()을 쓸 때

, 당신은 __call__ 방법을 실행하기 위해, 즉, 전화pop.destroy 객체에 파이썬을 말한다. pop.destroy() 효과적으로 pop.destroy 방법을 실행하는 동안, (대화 형 인터프리터에서 실행할 때 <bound method Toplevel.destroy of...> 같은 인쇄 제외) 아무것도하지 않는 것 pop.destroy를 작성 즉

.

+0

이렇게 명확하고 간결한 답변을 주셔서 대단히 감사합니다. 오른쪽 다리, 이것은 내 문제를 해결했으며 방법을 호출 할 때 나의 미래 지식을 도왔습니다. 훌륭한 답변과 신속한 답변, 다시 한 번 감사드립니다. – Shallon