tkinter pack方法的“填充”和“扩展”选项之间的区别

时间:2015-01-22 13:26:26

标签: python tkinter

我知道这是一个太微不足道的问题,但我是python的新手,我刚刚开始使用tkinter模块。我到处都看到了它,我无法找到满意的答案。我找到了以下内容:

  

fill选项:它决定是否占用更多空间或保留   “一个人自己的”维度。

     

expand选项:它处理父窗口小部件的扩展。

问题是这两个声音或多或少相同的。我甚至尝试了一些例子,通过在fill的4个值和expand的2个值之间切换,但在2或3个案例中接收了或多或少相同的输出,因为我有这个查询。在这方面,任何帮助将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:28)

来自effbot

  

fill 选项告诉管理器小部件想要填充分配给它的整个空间。该值控制着如何填充空间; BOTH 意味着小部件应该在水平和垂直方向上扩展, X 意味着它应该只是水平扩展,而 Y 意味着它应该只扩展垂直。

     

展开选项告诉管理员为小部件框分配额外的空间。如果父窗口小部件的大小超过了保存所有打包窗口小部件所需的大小,则任何超出的空间都将分布在展开选项设置为非零值的所有窗口小部件中。

因此fill告诉窗口小部件在指定的方向上增长到可用的空间,expand告诉主设备获取未分配给任何窗口小部件的任何空间并将其分发给所有具有非零expand值的小部件。

运行此示例时,差异变得清晰:

import Tkinter as tk

root = tk.Tk()
root.geometry('200x200+200+200')

tk.Label(root, text='Label', bg='green').pack(expand=1, fill=tk.Y)
tk.Label(root, text='Label2', bg='red').pack(fill=tk.BOTH)

root.mainloop()

您可以看到带有expand=1的标签被分配了尽可能多的空间,但只能按照指定的方向占用它Y. 带fill=tk.BOTH的标签会向两个方向展开,但可用空间较小。

Expand vs Fill

答案 1 :(得分:16)

我已经试错了;-)。这是概述。

fill and side combinations with expand = False fill and side combinations with expand = True

import tkinter as tk

root = tk.Tk()
root.geometry()

for e, expand in enumerate([False, True]):
    for f, fill in enumerate([None, tk.X, tk.Y, tk.BOTH]):
        for s, side in enumerate([tk.TOP, tk.LEFT, tk.BOTTOM, tk.RIGHT]):
            position = '+{}+{}'.format(s * 205 + 100 + e * 820, f * 235 + 100)
            win = tk.Toplevel(root)
            win.geometry('200x200'+position)
            text = str("side='{}'\nfill='{}'\nexpand={}".format(side, fill, str(expand)))
            tk.Label(win, text=text, bg=['#FF5555', '#55FF55'][e]).pack(side=side, fill=fill, expand=expand)
                
root.mainloop()