2016-12-29 10 views
1

Я пытаюсь научить себя Python, так извиниться за то, что может быть глупым вопросом, но это заставило меня с ума сойти на несколько дней. Я рассмотрел другие вопросы по одному и тому же вопросу здесь, но, похоже, не смог заставить это работать.Закрытие окна 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

Метод, который действительно destroy на pop объекта.

Однако, внутри метода yesButton, pop относится к чему-то неизвестному.

При инициализации вашего объекта, в методе __init__, вы должны поместить pop элемент в качестве атрибута self:

self.pop = Toplevel() 

Затем внутри вашего метода yesButton, вызовите destroy метод на self.pop объекта:

self.pop.destroy() 

О разнице между pop.destroy и pop.destroy():

В Python почти все является объектом. Таким образом, метод также является объектом.

Когда вы пишете pop.destroy, вы ссылаетесь на объект метода, названный destroy и принадлежащий объекту pop. Это в основном то же самое, что и запись 1 или "hello": это не утверждение или, если хотите, не действие.

Когда вы пишете pop.destroy(), вы говорите Python для вызоваpop.destroy объекта, то есть, чтобы выполнить его метод __call__.

Другими словами, написание pop.destroy не будет делать ничего (для печати что-то вроде <bound method Toplevel.destroy of...> при запуске в интерактивном интерпретаторе, кроме), в то время как pop.destroy() будет эффективно работать метод pop.destroy.

+0

Большое спасибо за такой ясный и лаконичный ответ. Правильная нога, это решило мою проблему, а также помогло с моими будущими знаниями при вызове методов. Отличный ответ и быстро, Еще раз спасибо – Shallon

 Смежные вопросы

  • Нет связанных вопросов^_^