2016-02-16 2 views
1
#game class 
import Tkinter as tk 

class Game(tk.Canvas): 

    def __init__(self, master): 

     canvas = tk.Canvas(master) 
     canvas.pack() 

     button = tk.Button(canvas, text='Quit', command=self.quit_game) 
     button.pack() 

    def quit_game(self): 
     root.destroy()#Should i put something else here? 


root = tk.Tk() 

game = Game(root) 

root.mainloop() 

Это хорошая практика, или, другими словами, существует проблема с наследования от холста непосредственно вместо кадра, если, например, я не собираюсь добавлять любые виджеты, кроме холста?Python Tkinter классовая структура практика

Другой вопрос, который у меня есть, касается root.destroy(). Я не понимаю, почему я не могу сказать master.destroy() или что-то в этом роде.

ответ

1

В случае наследования с Canvas или любого другого виджета Tkinter ничего не найдено.

re master.destroy() vs root.destroy(): вы можете называть его, как хотите. Вам просто нужна ссылка на корневое окно. Если вы назовете это root, для его уничтожения вы можете позвонить root.destroy().

В целом вам следует избегать использования глобальных переменных. Учитывая, что вы передаете корневой виджет своему классу, вы можете сохранить ссылку и использовать это вместо:

class Game(tk.Canvas): 

    def __init__(self, master): 
     self.master = master 
     ... 
    def quit_game(self): 
     self.master.destroy() 
Смежные вопросы