如何让 Tkinter Python3.x 嵌套网格?

How to get Tkinter Python3.x to nest grids?

几天来我一直在尝试弄清楚如何将网格放入对象网格中。我有两个框架(我猜这是 Tk 中的小部件?)我将一个添加到另一个,但是 its 小部件的位置似乎不尊重父小部件(和它只是覆盖它们)。

这是我的 MCVE

import tkinter as tk
class TestDoubleNested(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.grid()
        self.test_label = tk.Label(text="AAAAAAAAA")
        self.test_label.grid(row=0, column=0)

class TestNested(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.grid()
        self.test_label = tk.Label(text="top_level_test_label")
        self.test_label.grid(row=0, column=0)
        self.test_label2 = tk.Label(text="top_level_test_label2")
        self.test_label2.grid(row=0, column=1)
        # expected to be in 3rd column...
        self.test = TestDoubleNested(master)
        self.test.grid(row=0, column=4)


test = TestNested()
test.master.title("Test Example")
test.master.maxsize(1000, 400)
test.master.wm_geometry("400x300")

test.mainloop()

无论我如何移动 self.grid() 调用或更改列内容,显示都是相同的:

如您所见,AAAAAAAA 显示 另一个来自父级的小部件之上,理想情况下它应该显示 到所有东西的侧面 .

您没有为每个小部件指定 master,因此它们都被添加到根 window。如果您希望小部件位于框架内,则必须在创建小部件时将框架指定为第一个参数:

class TestDoubleNested(tk.Frame):
    def __init__(self, master=None):
        ...
        self.test_label = tk.Label(self, text="AAAAAAAAA")
        ...


class TestNested(tk.Frame):
    def __init__(self, master=None):
        ...
        self.test_label = tk.Label(self, ...)
        self.test_label2 = tk.Label(self, ...)
        self.test = TestDoubleNested(self)
        ...