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

Pyt*_*ser 26 python tkinter

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

fill 选项:它确定是否占用更多空间或保留"自己的"维度.

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

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

Ron*_*ald 40

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

填充和边组合与 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()
Run Code Online (Sandbox Code Playgroud)

  • 我的错,事实上我只看带有单个小部件的窗口。我改变了它。 (3认同)
  • 太感谢了!这是我找到的关于它的最佳答案。 (3认同)

fhd*_*sdg 30

来自effbot:

填充选项告诉小部件要填写分配给它的整个空间的经理.该值控制着如何填充空间; 两个意味着小部件应该在水平和垂直方向上扩展,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()
Run Code Online (Sandbox Code Playgroud)

您可以看到标签带有expand=1尽可能多的空间,但只能按指定的方向占用Y.标签fill=tk.BOTH在两个方向上都展开,但可用空间较小.

展开vs填充


小智 17

我也是一个努力理解这些选项如何协同工作的人。

值得庆幸的是,在Ronald的直观解释下,终于有了清晰的认识。

所以我编写了一些程序来模拟 pack 的工作原理。
https://github.com/thom-jp/tkinter_pack_simulator

这是运行程序的图像:

这是运行程序的图像