我非常感谢您找出grid
几何管理器的帮助。
这是我要构建的。
我当时正在考虑使用网格,但是我找不到任何可以清楚地说明问题的优秀教程解释如何使用它。有很多教程,但大多数教程要么非常简单,要么真的过时了。
我不确定如何仅使用网格来构建图片中显示的内容,因为所有元素相互嵌套,并且每个元素应该在其中包含更多元素。使用网格排列最外面的小部件并不难。我只是将工具栏放在第0行,然后最外面的PanedWidow(绿色)进入第一行,然后状态栏进入第二行。在那之后,我需要在绿色PanedWindow内部进行排列。我将另一个PanedWindow(粉红色)放入绿色PanedWindow的右窗格中,然后将笔记本插入其顶部窗格。
现在,我需要向这些内部窗格添加更多小部件。例如。我要添加粉色PanedWindow底部窗格的一些按钮。这就是我遇到问题的地方。
[如果我尝试使用pack()
在这些最里面的窗格中安排内容,Python会大声喊叫我使用多个几何管理器。但是,当我考虑如何使用grid
完成此操作时,我只是找不到细分的方法最里面的窗格变成较小的网格。
小部件内部是否有被外部网格作用的网格?
我发现a post已有大约两年的历史,可能对于您的使用而言有点太老了,但是它具有有关Tkinter中嵌套网格的一些信息。它建议使用框架嵌套网格,实质上在框架的子项中包含子项。在这些框架中,您可以放置对象。
[当我看到小部件占据一个区域的整个宽度或整个高度时,我通常使用pack
,因为它是专门为沿空空腔的一侧放置对象而设计的。您可以使用grid
,但它需要额外的代码,因为您既需要添加小部件,又需要配置行和列。使用pack
,您要做的就是添加小部件。
例如,很明显,您希望底部有一个状态栏,同时需要一个工具栏,中间还有一个窗格式小部件。因此,从以下示例开始:
import tkinter as tk
root = tk.Tk()
root.geometry("600x400")
toolbar = tk.Frame(root, background="#d5e8d4", height=40)
statusbar = tk.Frame(root, background="#e3e3e3", height=20)
main = tk.PanedWindow(root, background="#99fb99")
toolbar.pack(side="top", fill="x")
statusbar.pack(side="bottom", fill="x")
main.pack(side="top", fill="both", expand=True)
root.mainloop()
注意:为说明起见,将宽度,高度和颜色添加到框架中,因为否则,空框架的大小将为1x1。在框架内添加小部件后,可以删除width
和height
选项。
您说右边将有一个平移的窗口,因此请在右边添加它。我们将在左侧使用普通框。
left_pane = tk.Frame(main, background="#99fb99", width=100)
right_pane = tk.PanedWindow(main, background="#99fb99", width=200)
main.add(left_pane)
main.add(right_pane)
接下来,将两个窗格添加到右侧。为了使我可以用最少的代码显示颜色,我将在顶部使用框架而不是笔记本:
notebook = tk.Frame(right_pane, background="#99ceff", height=70)
bottom_right = tk.Frame(right_pane, background="#ffe6cd", height=50)
right_pane.add(notebook)
right_pane.add(bottom_right)