我喜欢的选项是继承Tk类。我认为这是更合理的选择,因为窗口实际上是你的应用程序。从框架继承,对于我而言,从Button或Canvas或Label继承起来并没有什么意义。因为你只能有一个根,所以这是你继承的。
我还认为,如果您将导入作为导入Tkinter作为tk导入,而不是从Tkinter import *导入代码,则可以使代码更易读。所有的电话都明确提到了tk模块。我不建议所有的模块,但对我来说,Tkinter是有道理的。
例如:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.label = tk.Label(text="Hello, world")
self.label.pack(padx=10, pady=10)
app = SampleApp()
app.mainloop()
*注意:自从最初写这个答案以来,我改变了我的立场。我现在更喜欢从Frame而不是Tk继承。没有一个真正的优势或另一种方式,它更像是一种哲学选择。无论如何,我相信无论您是从Frame还是Tk继承,我认为任何一种选择都优于继承于无…的代码中的第一个例子。
如果您希望应用程序支持多个相同的窗口,那么从Frame继承的一个轻微优点就是超过Tk。在这种情况下,从Frame继承可以让您创建第一个窗口作为root的子节点,另外还可以创建Toplevel实例的子窗口。但是,我看到很少有程序需要这样做。