我正在尝试在一个更大网格结构的框架内设置一个网格。我试图将它提炼到最简单的问题版本。
from tkinter import Tk, Frame, Label, Entry
root = Tk()
root.geometry('800x800')
frame1 = Frame(root, width=400, height=400, background="Blue")
frame2 = Frame(root, width=400, height=400, background="Red")
frame1.grid(row=0, column=0)
frame2.grid(row=1, column=1)
label1 = Label(frame1,text='Label1')
label1.grid()
标签不是将标签放在frame1中,而是替换整个网格中的框架:
我看过其他例子,但我无法确定他们为什么工作而我的工作没有。
答案 0 :(得分:2)
框架的width=
和height=
通常仅在没有儿童时适用。添加子窗口小部件后,它会自行调整大小以适应其内容。所以frame1
仍然存在,它现在与标签完全相同,并且完全由标签覆盖。
要关闭此自动调整大小的行为,请在框架上调用.grid_propagate(0)
(或.pack_propagate(0)
,具体取决于用于框架儿童的几何管理器。)
答案 1 :(得分:1)
使用jasonharper的观察结果框架自动调整自身大小并发布了类似的问题here,我能够更新代码。
from tkinter import Tk, Frame, Label
root = Tk()
root.geometry('800x800')
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(1, weight=1)
root.grid_columnconfigure(1, weight=1)
frame1 = Frame(root, background="Blue")
frame2 = Frame(root, background="Red")
frame1.grid(row=0, column=0, sticky="nsew")
frame2.grid(row=1, column=1, sticky="nsew")
label1 = Label(frame1,text='Label1')
label1.grid()
我对代码所做的更改是:
结果: