繁体   English   中英

结合网格/包Tkinter

[英]Combining grid/pack Tkinter

我知道过去网格和包装上有很多问题,但我只是不明白如何将两者结合起来,因为我在两个方向(行/列)上扩展我的'表'时遇到了困难。

按钮我希望保持相同的尺寸,但始终保持在窗口的底部。 然而,我希望通过调整窗口大小自动扩展“表格”,但似乎无法使其正常工作。 将'win1'改为打包工作的意义在于它保持中心但就是这样。

我怎么能达到相同的效果,如粘贴等包装,因为我知道我需要更改术语。

代码如下(显示基本框架和几个小部件,而不是完整的代码):

root = Tk()  

win1 = Frame(root)
win1.pack()
win1.grid_columnconfigure(0, weight=1)
win1.grid_rowconfigure(1, weight=1)

frame_table = ttk.Frame(win1, style="Black.TLabel", relief='sunken', borderwidth=1)
frame_table.pack(row=2, column=0, padx=1, pady=1, sticky= "nsew")
frame_table.grid_columnconfigure(0, weight=1)
frame_table.grid_rowconfigure(1, weight=1)
text_table1 = Label(frame_table, text='Number1', bg='white', borderwidth=0)
text_table1.grid(row=1, column=0, sticky="nsew", padx=1, pady=1)
empty1 = Label(frame_table, bg='white', borderwidth=0)
empty1.grid(row=2, column=0, sticky="nsew", padx=1, pady=1)
text_table2 = Label(frame_table, text='Number2', bg='white', borderwidth=0, width=12)
text_table2.grid(row=1, column=1, sticky="nsew", padx=1, pady=1)
empty2 = Label(frame_table, bg='white', borderwidth=0)
empty2.grid(row=2, column=1, sticky="nsew", padx=1, pady=1)

frame_but = ttk.Frame(win1)
frame_but.grid(sticky=S, padx=1, pady=1)
frame_but.grid_columnconfigure(0, weight=1)
frame_but.grid_rowconfigure(1, weight=1)
but1 = ttk.Button(frame_but, text='Start', command=Start)
but1.grid(row=3, column=0, padx=2, pady=1, sticky="S")

你的第一个问题是主框架win1没有选项。 默认情况下,它不会填充它所在的容器部分。因此,无论您对内部小部件做什么,整个事物都将堆叠锚定到窗口的顶部。 那么你应该做的第一件事是告诉win1填充整个窗口(假设它实际上是你想要它做的):

win1.pack(side="top", fill="both", expand=True)

当您调整窗口大小时,这将导致此框架正确扩展和缩小。

第二个问题是你在win权重为1时给第0行,但是你把第3行中的frame_table放在默认权重为0的情况下。我不知道这是否有意,但这就是保持标签和条目小部件粘在屏幕的底部,因为win1的空行0正在扩展和缩小以占用额外的空间。

如何学习布置你的小部件

适当的调整大小行为很容易实现,但要学会如何正确实现它是相当困难的。 我的建议是,拿一些纸和一支铅笔。 绘制应用程序的主要区域 - 每个区域具有不同的属性。 例如,沿底部的一行应该保持在底部(状态栏或按钮行)。 也许顶部的东西(例如工具栏)应该保持在顶部等。通常,只有一个区域是可扩展的,尽管可扩展区域本身可以分成两个或更多个区域。

在这种情况下,我猜你有两个区域:一个表和一排按钮。 搞清楚这一点很简单。 接下来,为每个区域创建一个框架,并为每个区域创建一个框架。 为它们提供单独的背景颜色,并使用网格或包将它们放在窗口中,无论哪个为您提供所需的调整大小行为。 如果你有一个简单的布局(每个区域都是从上到下或从左到右),那么pack非常棒,如果你真的有一个网格,网格很棒。 使用此方法,调整选项,直到获得主要区域所需的行为。 不同的颜色将帮助您查看哪些区域正在调整大小,哪些区域没有。

一旦主区域正常工作,您就可以开始关注内部部分。 再次拿出铅笔和纸,并对每个子区域做同样的事情。 画出内部区域,找出哪些会在容器内生长,哪些不会。 也许只有一个主要的子区域,所以你可以跳过这一部分。 最后,如果你有子区域,创建帧,再次给它们不同的颜色,这样你就可以看到调整大小。 调整设置,直到所有内容都按照您想要的方式调整。 泡沫,冲洗,重复。

最后,您将无法再细分窗口。 通常只有几个区域,所以这个过程很快。 一旦你的程序的不同区域都调整了你想要的大小,就可以添加实际的小部件了。 完成后,您可以返回并从框架中删除颜色。

这很简单,但需要有条不紊的方法。 只是将一堆小部件扔进一个框架并尝试随机的东西让它工作并不是正确的方法。 要有条不紊,将您的设计布置在纸上,转移到具有不同颜色的框架,然后添加您真实的小部件并添加最终的抛光。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM