Python Tkinter class 结构实践

Python Tkinter class structure practice

#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()

这是好的做法吗,或者换句话说,直接从 canvas 而不是框架继承是否存在问题,例如,如果我不打算添加除 [=19= 之外的任何小部件]?

我的另一个问题是关于 root.destroy()。我不明白为什么我不能说 master.destroy() 或类似的东西。

Canvas 或任何其他 Tkinter 小部件继承没有错。

re master.destroy() vs root.destroy():你可以随意调用它。您只需要对根 window 的引用。如果你称它为 root,要摧毁它你会称它为 root.destroy().

一般来说你应该避免使用全局变量。鉴于您将根小部件传递给 class,您可以保存一个引用并改为使用它:

class Game(tk.Canvas):

    def __init__(self, master):
        self.master = master
        ...
    def quit_game(self):
        self.master.destroy()