子部件的子部件未显示 - 为什么以及如何修复它?

Child widgets of child widget not showing - why and how to fix it?

我遇到了无法创建子控件的子控件的问题。我试过使用 class 创建一个带有小部件的 window 或者一个函数来查看我是否不了解 classes 是如何工作的,但失败是一样的.

我已将问题归结为以下代码:

import tkinter as tk

root = tk.Tk()
root.geometry('900x400')

frame1=tk.LabelFrame(root, text="frame1",width=800, height=400, bg='blue', bd=5).pack()
labelframe1=tk.LabelFrame(frame1, text="labelframe1",width=300, height=300, bg='green', bd=15).pack()
labelframe2=tk.LabelFrame(frame1, text="labelframe2",width=300, height=300, bg='yellow', bd=15).pack()

button1 = tk.Button(labelframe1,text="text").pack()

我没有收到此代码的错误,但结果是一样的。只创建root的child,不创建root的child。

如何创建“孙子”小部件?

在python中,x().y()returns的值为y()。因此,当您执行 tk.LabelFrame(...).pack() 时,它会 returns None。因此,当您执行 tk.Button(labelframe1, ...) 时,它与 tk.Button(None, ... 相同,这会导致按钮成为根 window.

的子项

最重要的是,最好将小部件创建与小部件布局分开。我个人也发现将布局代码组合在一起可以使代码更容易理解。我认为明确定义小部件被打包到哪一侧也是一个好习惯。

frame1=tk.LabelFrame(root, text="frame1",width=800, height=400, bg='blue', bd=5))
labelframe1=tk.LabelFrame(frame1, text="labelframe1",width=300, height=300, bg='green', bd=15)
labelframe2=tk.LabelFrame(frame1, text="labelframe2",width=300, height=300, bg='yellow', bd=15)
button1 = tk.Button(labelframe1,text="text")

frame1.pack(side="top")
labelframe1.pack(side="top")
labelframe2.pack(side="top")
button1.pack(side="top").
button1 = tk.Button(labelframe1,text="text").pack()