我知道过去在网格和包装上有很多问题,但我只是不明白如何将两者结合起来,因为我在两个方向(行/列)上扩展我的'表'时遇到了困难。< / p>
按钮我希望保持相同的尺寸,但始终保持在窗口的底部。 然而,我希望通过调整窗口大小自动扩展“表格”,但似乎无法使其正常工作。将'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")
答案 0 :(得分:15)
你的第一个问题是主框架win1
没有选项。默认是它不填充它所在的容器部分。因此,无论你对内部小部件做什么,整个东西都会堆叠锚定到窗口的顶部。那么你应该做的第一件事就是告诉win1
填满整个窗口(假设这实际上是你想要的):
win1.pack(side="top", fill="both", expand=True)
当您调整窗口大小时,这将导致此框架正确展开和缩小。
第二个问题是你在win
中给第0行的权重为1,但是你将frame_table
放在第3行,其默认权重为0.我不知道如果这是有意或无意,但这是使标签和条目小部件保持在屏幕底部的原因,因为win1
的空行0正在扩展并缩小以占用额外的空间。
如何学习布置小工具
适当的调整大小行为很容易做到,但学习如何正确行事却相当困难。我的建议是,拿一些纸和一支铅笔。绘制应用程序的主要区域 - 每个区域具有不同的属性。例如,沿底部的一行应该保持在底部(状态栏或按钮行)。也许顶部的东西(例如工具栏)应该保持在顶部等。通常,只有一个区域是可扩展的,尽管可扩展区域本身可以分成两个或更多个区域。
在这种情况下,我猜你有两个区域:一张桌子和一排按钮。搞清楚这一点很简单。接下来,为每个区域创建一个框架,并为每个区域仅一个框架。为它们提供单独的背景颜色,并使用网格或包将它们放在窗口中,无论哪个为您提供所需的调整大小行为。如果你有一个简单的布局(每个区域都是从上到下或从左到右),那么pack非常棒,如果你真的有一个网格,网格很棒。使用此方法,调整选项,直到获得主要区域所需的行为。不同的颜色可以帮助您查看哪些区域正在调整大小,哪些区域没有。
一旦主区域正常工作,您就可以开始关注内部部分。再次拿出铅笔和纸,并对每个子区域做同样的事情。画出内部区域,找出哪些会在容器内生长,哪些不会。也许只有一个主要的子区域,所以你可以跳过这一部分。最后,如果你有子区域,创建帧,再次给它们不同的颜色,这样你就可以看到调整大小。调整设置,直到所有内容都按照您想要的方式调整。泡沫,冲洗,重复。
最后,您将无法再细分窗口。通常只有几个区域,所以这个过程很快。一旦你的程序的不同区域都调整了你想要的大小,就可以添加实际的小部件了。完成后,您可以返回并从框架中删除颜色。
这很简单,但需要有条不紊的方法。只是将一堆小部件扔进一个框架并尝试随机的东西让它工作是不正确的方法。要有条不紊,将您的设计布置在纸上,转移到具有不同颜色的框架,然后添加真实的小部件并添加最终的抛光。