如何在Tkinter中嵌套Frame?嵌套失败问题求助
解决Tkinter Frame嵌套失败的问题
我来帮你排查下问题哈——你这段代码里的Frame嵌套失败,核心原因是把Frame的创建和pack()调用写在同一行了!
问题根源
Tkinter里的pack()(包括grid()、place())方法返回的是None,如果你像这样写:
lframe=Frame(r,width=1000,height=650,relief='raise',bd=8).pack(side=LEFT)
那lframe变量保存的不是创建出来的Frame对象,而是None!后续你想把lframe1嵌套到lframe里,其实是把父容器指定成了None,这些子Frame就会直接挂载到主窗口r上,自然就乱了。
修正后的代码
把Frame的创建和布局方法分开写,让变量保存真正的Frame对象:
from tkinter import Tk, Frame # 记得导入需要的模块哦 r = Tk() r.geometry("1350x650") # 建议给主窗口设置合适的大小 # 创建左侧主Frame并布局 lframe = Frame(r, width=1000, height=650, relief='raise', bd=8) lframe.pack(side="left") # 创建右侧主Frame并布局 rframe = Frame(r, width=350, height=650, relief='raise', bd=8) rframe.pack(side="right") # 嵌套左侧子Frame lframe1 = Frame(lframe, width=1000, height=100, bd=8, relief='raise') lframe1.pack(side="top") lframe2 = Frame(lframe, width=1000, height=55, bd=8, relief='raise') lframe2.pack(side="top") # 嵌套右侧子Frame rframe1 = Frame(rframe, width=350, height=215, relief='raise', bd=8) rframe1.pack(side="top") rframe2 = Frame(rframe, width=350, height=415, relief='raise', bd=8) rframe2.pack(side="top") r.mainloop()
效果说明
这样修改后,子Frame就会正确嵌套到对应的父Frame里,布局就会和你预期的一样:左侧主Frame里上下排列两个子Frame,右侧主Frame里也是上下排列两个子Frame。
内容的提问来源于stack exchange,提问作者Vignesh A
相关产品推荐
相关产品推荐

