怎样解决Tkinter中Frame嵌套导致外部Frame大小失灵问题?

新手上路,请多包涵

使用的是Python,tk,我如果在一个Frame中嵌套一个Frame,外面的Frame大小设置就失灵了。
image.png

import customtkinter
if __name__ == "__main__":
    app = customtkinter.CTk()
    app.geometry("300x300")
    frame = customtkinter.CTkFrame(app, width=280, height=280, fg_color="red")

    frame_1 = customtkinter.CTkFrame(
        frame, width=20, height=20, fg_color="green", corner_radius=5
    )
    frame_1.pack()
    frame_2 = customtkinter.CTkFrame(
        frame, width=20, height=20, fg_color="blue", corner_radius=5
    )
    frame_2.pack()

    frame.pack()

    app.mainloop()

本来是想做一组小Frame在里面,然后更随窗口大小变化的。
m*n行,最后一行可能不填满这个样子。

阅读 1.2k
avatarAI BotBETA

在Tkinter中,当你在一个Frame中嵌套另一个Frame时,可能会遇到一些布局问题。在你的代码中,外层Frame的大小设置没有生效,这是因为内部Frame(frame_1和frame_2)占据了整个外层Frame的空间。要解决这个问题,你需要确保内部Frame不会扩展外层Frame的大小。

解决这个问题的一种方法是使用pack方法或grid方法来管理Frame中的布局。这里是一个修改后的示例代码,它使用了pack方法来排列内部Frame,并且不改变外层Frame的大小:

import customtkinter as CTk

if __name__ == "__main__":
    app = CTk.CTk()
    app.geometry("300x300")
    frame = CTk.CTkFrame(app, width=280, height=280, fg_color="red")
    frame_1 = CTk.CTkFrame(frame, width=20, height=20, fg_color="green", corner_radius=5)
    frame_2 = CTk.CTkFrame(frame, width=20, height=20, fg_color="blue", corner_radius=5)
    frame.pack(side="top", fill="both", expand=True)
    frame_1.pack(side="top", fill="both", expand=True)
    frame_2.pack(side="top", fill="both", expand=True)
    app.mainloop()

在这个示例中,我使用了pack方法的side参数来指定Frame的放置位置,fill参数来指定Frame的填充方式,以及expand参数来控制Frame是否扩展以填充可用空间。通过设置这些参数,你可以控制内部Frame如何在窗口中布局,并避免改变外层Frame的大小。

1 个回答

这种问题搜得到吧, 在frame.pack()下加一行

frame.pack_propagate(0)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题