gpt4 book ai didi

python - 调用 Tk() 实际上做了什么?

转载 作者:太空狗 更新时间:2023-10-29 18:25:38 25 4
gpt4 key购买 nike

当我看到 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 Referenceeffbot.orgTkDocs),通常会调用 root = tk.Tk(),其余示例均来自建立在。我也没有在 NMT 引用资料的任何地方看到任何对 Tk 类初始化的引用。

关于 Tk 类,我可以获得的信息也很模糊,Python 引用仅将其列为“顶层小部件……通常是应用程序的主窗口”。最后,如果我替换之前展示的代码片段中的最后几行:

root = tk.Tk()
app = Application(root)

程序会像以前一样运行。考虑到所有这些,我想知道的是:

  • 调用 root = tk.Tk() 到底做了什么(比如初始化了什么),为什么前面的代码片段没有它也能工作?
  • 如果我不调用 Tk() 而只是围绕 Frame 类构建我的应用程序,我会遇到任何陷阱或限制吗?

最佳答案

Tkinter 的工作原理是在幕后启动一个 tcl/tk 解释器,然后将 tkinter 命令翻译成 tcl/tk 命令。主窗口和这个解释器是内在联系的,两者都是 tkinter 应用程序工作所必需的。

创建 Tk 的实例会初始化此解释器并创建根窗口。如果您没有显式初始化它,那么在您创建第一个小部件时将隐式创建一个。

我不认为不自己初始化有任何缺陷,但正如 python 的禅宗所说,“显式优于隐式”。如果您显式创建 Tk 的实例,您的代码将稍微容易理解。例如,它会阻止其他人就您的代码提出与您刚刚询问的其他代码相同的问题。

关于python - 调用 Tk() 实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24729119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com