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

新手上路,请多包涵

Tkinter 的 pack 方法的“ fill ”和“ expand ”选项有什么区别?

其实我到处都查过了,都没有找到满意的答案。我发现了以下内容:

fill 选项:它决定是使用更多空间还是保留“自己的”维度。

expand 选项:处理父控件的扩展。

问题是这两个听起来差不多。我什至通过在 --- 的 4 个值和 fill expand 4 个值之间切换尝试了一些示例,但在 2 或 3 个案例中收到或多或少相同的输出,因此我有这个查询。

原文由 Python_user 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

来自 effbot

填充 选项告诉管理器小部件想要填充分配给它的整个空间。该值控制如何填充空间; 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 的标签在两个方向上扩展,但可用空间较少。

扩展与填充

原文由 fhdrsdg 发布,翻译遵循 CC BY-SA 4.0 许可协议

我已经完成了反复试验。这是一个概述:

expand = False 的填充和侧面组合填充和侧面组合 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()

原文由 Ronald 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题