【发布时间】:2015-12-29 06:33:18
【问题描述】:
如果我想简单地用语句创建一个 Tkinter GUI,我可以这样做:
from Tkinter import *
root = Tk()
root.title("Test Window")
tkFrame = Frame(root)
tkButton = Button(tkFrame)
[...]
然而,文档建议将 Tkinter 与类定义一起使用,子类化 Frame 小部件:
class App(Frame):
[...]
我想了解为什么会这样。为什么我们不能子类化 Frame 的容器,即窗口?看起来这就是第一个示例中的语句所做的,那么为什么不在类定义中呢?
编辑(按照 Bryan Oakley 的回答):
我想在 Tkinter 的最高级别进行实例化,我认为它是 Tk()(虽然我遇到过引用说 Frame 是最高级别,但没关系)。实际上,以下将创建一个窗口:
from Tkinter import *
class Application(Tk):
pass
app = Application()
app.mainloop()
...但是当我尝试添加小部件时,我会收到错误或两个窗口,小部件位于新窗口中,具体取决于我如何构建代码。这是一个基本示例,它将生成带有按钮的第二个窗口:
from Tkinter import *
class Application(Tk):
tkBtn = Button()
tkBtn.pack()
app = Application()
app.mainloop()
使用self、__init__ 等会产生错误。有人可以指出我在最高级别实例化 Tkinter 的工作代码吗?就像我看到的所有 Frame 子类一样,但在最高级别?
【问题讨论】:
-
您遇到的任何引用说明
Frame是“Tkinter 的最高级别”都是错误的。