假设我有一个 tkinter 窗口,其中有两个独立的框架,我想填充信息,我唯一的问题是框架大小动态设置自身。我的窗口大小是 500 x 500,我希望顶部框架从 0,0 到 250,250。底部为 0,250 至 500,500。我想你现在可能明白了
这是迄今为止我的代码:
def main_game(username,password,new_u,old_u):
Tk_window_center(500,500)
root.resizable(width=False, height=False)
##
if new_u =="":
pass
else:
new_u.pack_forget()
if old_u =="":
pass
else:
old_u.pack_forget()
##
output_window_frame=Frame(root, bg="black")
user_terminal_frame=Frame(root)
##
usr_output=Label(output_window_frame)
user_inp=Entry(user_terminal_frame)
user_term=Label(user_terminal_frame)
##
output_window_frame.grid(row=0,column=0,rowspan=3,columnspan=3, sticky="NSEW")
user_terminal_frame.grid(row=4,column=0,rowspan=3,columnspan=3, sticky="NSEW")
user_inp.pack(side="top", fill="x")
user_term.pack(side="bottom", fill="x")
附注new_u 和 old_u 是在启动时激活的先前帧
由于您使用的是
grid
,因此您需要为每行赋予相同的非零权重,以便每行扩展以填充其父行的一半。您将一个窗口放在第 4 行中,这是可以的,但由于窗口中只有两项,因此会产生误导,因此我建议使用第 0 行和第 1 行。
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(4, weight=1)
output_window_frame.grid(row=0,column=0,rowspan=3,columnspan=3, sticky="NSEW")
user_terminal_frame.grid(row=1,column=0,rowspan=3,columnspan=3, sticky="NSEW")
当然,如果您在第 1、2 或 3 行中放入其他内容,则每个帧的高度将不会是 250 像素。
还有其他方法可以完成同样的事情。您可以使用
pack
,并将包选项 fill
设置为 "both"
,将 expand
设置为 True
。或者,您可以使用 place 并将顶部窗口放置在 x/y 坐标 0,0 处,相对宽度为 1.0,相对高度为 0.5,然后将另一个窗口再次放置在 250,250 处,相对宽度为 1.0,相对高度 0.5