可以一次性打包多个Tkinter控件吗,而不是单独打包?

5 投票
1 回答
3558 浏览
提问于 2025-04-18 17:24

你首先创建一个主窗口,然后再添加多个小部件,比如标签、按钮和事件。

你需要把每一个小部件放到窗口里,这里有几种我知道的方式可以做到。

Button(root, text="Button1", command=something).pack()

或者

btn1 = Button(root, text="Button1", command=something)
btn1.pack()

有没有办法一次性把多个小部件放到“主窗口”里,而使用循环,也需要明确地给每个小部件命名,比如这样:

for item in [btn1, btn2, label1, label2]:
    item.pack()

1 个回答

7

你可以使用 root.children 来获取所有添加到这个父元素上的按钮和标签,然后对它们调用 pack 函数。children 是一个字典,它把 ID 映射到实际的元素上。

root = Tk()

label1  = Label(root, text="label1")
button1 = Button(root, text="button1")
label2  = Label(root, text="label2")
button2 = Button(root, text="button2")

for c in sorted(root.children):
    root.children[c].pack()

root.mainloop()

这样做会把所有的按钮和标签一个接一个地从上到下排列,顺序和你添加到父元素时的顺序是一样的(因为用了 sorted)。不过要注意,这样做的用处其实不大,因为通常你不会把所有的控件都放在一列里。

撰写回答