2016-05-25 1 views
1

Мне нужно создать всплывающее окно, которое закончит игру. Всплывающее окно может быть либо внутри, либо вне игрового класса. На данный момент, он закрывает только один холст, как я могу сделать его закрыть себя, холст и canvas2, когда пользователь нажимает кнопку «Закрыть»Закрытие игры (объект) из tkinter popup

from tkinter import * 
import tkinter as tk 

class Game(object): 
    def __init__(self, master): 
     master.title("Game") 
     self._master = master 
     self._canvas2 = tk.Canvas(master, bg='grey', width=300, height=50) 
     self._canvas2.pack() 
     self._canvas = tk.Canvas(master, bg='grey', width=300, height=200) 
     self._canvas.pack() 


    #if conditions met, open popup: 
    self.popup() 

    def popup(self): 
     end = Toplevel() 
     end.title("End") 
     msg = Message(end, text="The game has ended") 
     msg.pack() 
     button = Button(end, text="Close", command=self._canvas.destroy) 
     button.pack() 

def main(): 
    root = tk.Tk() 
    app = Game(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

Другие варианты я пытался: command=self.destroy, command=self.exit(), command=self.quit()

Обратите внимание: игра должна быть объектом из-за ограничений назначения. Для меня также были предусмотрены инициализации внизу. Всплывающее окно не обязательно должно быть окном верхнего уровня (но ему нужно использовать tkinter), это только тот, который я попытался реализовать.

+0

вы пытались создать свою собственную функцию, которая удаляет как холсты, и вызов этой функции из вашей кнопки? –

+0

Просто попробовал, не повезло. 'command = self.close()', 'def close (self):', 'self._canvas.destroy, self._canvas2.destroy' Ничего не происходит. Также попытался поставить его вне класса (и удалить self), но это также не работает. Попробовали позвонить ему на приложение, root .... – 009

ответ

0

Решение создать свою собственную функцию для вызова с помощью кнопки:

... 
button = Button(end, text="Close", command=self.close) 
... 
def close(self): 
    self._canvas.destroy() 
    self._canvas2.destroy() 
+0

Спасибо, я забыл добавить круглые скобки. Я обнаружил, что, используя это, окна холста были уничтожены, но главное окно и всплывающее окно были открыты. Вызов 'self._master.destroy()' закрыл все. – 009

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