コード例 #1
0
class Application(tk.Frame):
    _title = "Game of 15"

    def __init__(self, parent=None):
        super().__init__(parent)
        self._parent = parent
        self.winfo_toplevel().title(self._title)
        self.grid(sticky="NEWS")
        self.columnconfigure(0, weight=1)
        self.rowconfigure(1, weight=1)

        self.__menu = MenuBar(self,
                              on_new_game=self._on_new_game,
                              on_exit=self._on_exit)
        self.__menu.grid(row=0, column=0)
        self.__game_field = GameField(self, on_win=self._on_win)
        self.__game_field.grid(row=1, column=0)

    def _on_new_game(self):
        self.__game_field.reset_field()

    def _on_win(self):
        # NOTE: Задержка нужна для того, чтобы UI успел перерироваться перед отображением сообщения
        self.after(1, self._process_win)

    def _process_win(self):
        tk_msg.showinfo(self._title, "You won!")
        self._on_new_game()

    def _on_exit(self):
        self._parent.destroy()