Tkinter中 Frame的放置方式

编程语言 2026-07-09

我正在尝试用tkinter构建一个数据可视化应用,它需要绘制一个带有每条记录下拉菜单的表格。为此,我使用grid放置标签,并再放一个frame。当我尝试在这个frame中放置元素时,它会把元素放在表格的0,0位置。使用Pack或 Place表示它位于由grid管理的小部件(在此为根窗口)中,而不在新的小部件中。如何在后续的frame中使用place布局管理器来放置项?

import tkinter as tk
root = tk.Tk()

root.title("DataViewer")
for i in range(10):
    tk.Label(root, text=i).grid(row=i, column = 0)
    tk.Label(root, text="Data " + str(i)).grid(row=i, column = 1)
    my_frame = tk.Frame(root,bg="lightgrey", width=400, height =20, container= True).grid(row = i, column = 2)
    tempLabel = tk.Label(my_frame, text="Expanding Data Here")
    tempLabel.grid(in_=my_frame, row = 0,column =0)

root.mainloop()

示例代码生成的GUI:

示例代码生成的 GUI

如GUI图像所示,意在将“此处展开数据”放置在灰色的“my_frame”框架内。

解决方案

container=True 似乎更多地涉及嵌入其他顶级应用程序,一旦应用就会阻止向该框架中添加任何普通小部件。

相反,移除 container=True 并把 grid() 放在新的一行,如下所示:

my_frame = tk.Frame(root, bg="lightgrey", width=400, height=20)
my_frame.grid(row=i, column=2)

之所以重要,是因为 .grid() 返回 None,因此当直接与框架的定义相关联时,实际上你将 my_frame 设为等于 None。这同样适用于使用放置方法的任何情况,如 grid()pack()place()

这将导致如下这一行:

tempLabel = tk.Label(my_frame, text="Expanding Data Here")

实际变成这样:

tempLabel = tk.Label(None, text="Expanding Data Here")

在Tkinter中,当你把某个小部件的父级设为 None 时,Tkinter将默认回到根窗口。

一些附加细节:
https://www.tcl-lang.org/man/tcl8.6/TkCmd/frame.htm

命令行名称:-container
数据库名称:container
数据库类:Container

该值必须为布尔值。如果为真,表示该窗口将被用作容器,在其中可以嵌入其他应用程序(例如,可以使用 -use 选项将Tk顶级窗口嵌入其中)。该窗口将支持相关的窗口管理器协议,用于处理诸如几何请求之类的操作。

在本应用中,该窗口不应有自己的子部件。此选项不能通过 configure 小部件命令来更改。请注意,当配置为容器时,-borderwidth-padx-pady 将被忽略,因为容器没有边框。

import tkinter as tk
root = tk.Tk()

root.title("DataViewer")


for i in range(10):
    tk.Label(root, text=i).grid(row=i, column=0)
    tk.Label(root, text="Data " + str(i)).grid(row=i, column=1)
    my_frame = tk.Frame(root, bg="lightgrey", width=400, height=20)
    my_frame.grid(row=i, column=2)
    tempLabel = tk.Label(my_frame, text="Expanding Data Here")
    tempLabel.grid(in_=my_frame, row=0, column=0)

root.mainloop()
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章