【发布时间】:2014-09-03 22:21:55
【问题描述】:
当我查看NMT Tkinter 8.5 Reference 中的一个最小示例时,我正在复习 Tkinter。
#!/usr/bin/env python
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.createWidgets()
def createWidgets(self):
self.quitButton = tk.Button(self, text='Quit',command=self.quit)
self.quitButton.grid()
app = Application()
app.master.title('Sample application')
app.mainloop()
一切都很好,直到我注意到 Tk 类没有被初始化。在我能找到的其他在线参考资料(Python's Library Reference、effbot.org、TkDocs)中,通常会调用root = tk.Tk(),其余的示例都以此为基础。我也没有在 NMT 的引用中看到任何对 Tk 类初始化的引用。
我可以获得的关于Tk 类的信息也很模糊,Python 参考仅将其列为“顶级小部件......通常是应用程序的主窗口”。最后,如果我替换之前介绍的 sn-p 中的最后几行:
root = tk.Tk()
app = Application(root)
程序会像以前一样运行。考虑到这一切,我想知道的是:
- 调用
root = tk.Tk()的实际作用是什么(例如,初始化了什么)以及为什么没有它之前的 sn-p 可以工作? - 如果我不调用
Tk()而只是围绕Frame类构建我的应用程序,我会遇到任何陷阱或限制吗?
【问题讨论】: