框架作为容器(tkinter)

时间:2014-12-09 21:17:56

标签: python python-3.x tkinter

Python 3.4.0。

你能帮我理解这里发生了什么:

from tkinter import *
root = Tk()

f = Frame(root, borderwidth=2) #
for relief in [RAISED, SUNKEN, FLAT, RIDGE, GROOVE, SOLID]:
    Label(f, text=relief, width=10, relief = relief).pack(side=LEFT) #
    #f = Frame(root, borderwidth=2, relief = relief)
    #Label(f, text=relief, width=10).pack(side=LEFT)
    f.pack(side=LEFT, padx=5, pady=5)
root.mainloop()

如果我现在取消注释评论的行并评论那些没有'#'最后标记,结果是一样的。

第一种情况:现状。这对我来说是可以理解的。在循环之前,我们创建一个框架。然后pack方法将每个标签放在父窗口小部件中(即f)。在这种情况下,f会扩展并包含多个标签。

嗯,第二种情况:如果我切换注释标记。 帧f总是新的。标签也总是新的。标签始终放在单独的框架上。我建议在每一帧中显示5个不同标签的帧。

你能帮我理解为什么结果一样吗?

1 个答案:

答案 0 :(得分:0)

听起来你想要五个独立的窗户,每个窗户都可以移动,关闭等等。

如果是这样,您应该使用Toplevel小部件而不是Frame

from tkinter import *
root = Tk()

for relief in [RAISED, SUNKEN, FLAT, RIDGE, GROOVE, SOLID]:
    t = Toplevel(root, borderwidth=2, relief = relief)
    Label(t, text=relief, width=10).pack(side=LEFT)
root.mainloop()