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