如何让 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)
...
几天来我一直在尝试弄清楚如何将网格放入对象网格中。我有两个框架(我猜这是 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)
...