Tkinter网格在网格内部?

问题描述 投票:0回答:2

我非常感谢您找出grid几何管理器的帮助。

这是我要构建的。

enter image description here

我当时正在考虑使用网格,但是我找不到任何可以清楚地说明问题的优秀教程解释如何使用它。有很多教程,但大多数教程要么非常简单,要么真的过时了。

我不确定如何仅使用网格来构建图片中显示的内容,因为所有元素相互嵌套,并且每个元素应该在其中包含更多元素。使用网格排列最外面的小部件并不难。我只是将工具栏放在第0行,然后最外面的PanedWidow(绿色)进入第一行,然后状态栏进入第二行。在那之后,我需要在绿色PanedWindow内部进行排列。我将另一个PanedWindow(粉红色)放入绿色PanedWindow的右窗格中,然后将笔记本插入其顶部窗格。

现在,我需要向这些内部窗格添加更多小部件。例如。我要添加粉色PanedWindow底部窗格的一些按钮。这就是我遇到问题的地方。

[如果我尝试使用pack()在这些最里面的窗格中安排内容,Python会大声喊叫我使用多个几何管理器。但是,当我考虑如何使用grid完成此操作时,我只是找不到细分的方法最里面的窗格变成较小的网格。

小部件内部是否有被外部网格作用的网格?

python tkinter grid
2个回答
0
投票

我发现a post已有大约两年的历史,可能对于您的使用而言有点太老了,但是它具有有关Tkinter中嵌套网格的一些信息。它建议使用框架嵌套网格,实质上在框架的子项中包含子项。在这些框架中,您可以放置​​对象。


0
投票

[当我看到小部件占据一个区域的整个宽度或整个高度时,我通常使用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。在框架内添加小部件后,可以删除widthheight选项。

screenshot of main layout

您说右边将有一个平移的窗口,因此请在右边添加它。我们将在左侧使用普通框。

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)

screenshot with left/right panes

接下来,将两个窗格添加到右侧。为了使我可以用最少的代码显示颜色,我将在顶部使用框架而不是笔记本:

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)

final screenshot

© www.soinside.com 2019 - 2024. All rights reserved.