Python 区别于;填写「;及;扩大;tkinter-pack方法的选项
我知道这是一个太琐碎的问题,但我对python还是新手,我刚刚开始使用Python 区别于;填写「;及;扩大;tkinter-pack方法的选项,python,tkinter,Python,Tkinter,我知道这是一个太琐碎的问题,但我对python还是新手,我刚刚开始使用tkinter模块。事实上,我到处都查过,但我找不到满意的答案。我发现: fill选项:它决定是使用更多空间还是保留更多空间 “自己的”维度 expand选项:它处理父窗口小部件的扩展 问题在于这两种声音或多或少是相同的。我甚至尝试了几个例子,通过在fill的4个值和expand的2个值之间切换,但在2或3种情况下收到了大致相同的输出,因此我有了这个查询。在这方面如有任何帮助,将不胜感激。提前谢谢 来自: fill选项告诉管理
tkinter
模块。事实上,我到处都查过,但我找不到满意的答案。我发现:
fill
选项:它决定是使用更多空间还是保留更多空间
“自己的”维度
expand
选项:它处理父窗口小部件的扩展
问题在于这两种声音或多或少是相同的。我甚至尝试了几个例子,通过在fill
的4个值和expand
的2个值之间切换,但在2或3种情况下收到了大致相同的输出,因此我有了这个查询。在这方面如有任何帮助,将不胜感激。提前谢谢 来自:
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的标签。这两个都向两个方向扩展,但可用空间较少
我已经完成了反复试验。以下是概述:
哦,对不起,从你描述它的方式来看,我认为它来自其他地方。为了对这两个选项有更多的了解,您可以稍微玩转一下示例中的选项,从label1中删除展开
,将展开
设置为1,然后尝试填充=tk.X
。。。背景色确实显示了小部件使用的主部件的哪一部分(在本例中是根部件)。我假设python默认情况下会将整个水平空间分配给一个小部件。因此,即使expand=0
但fill=X
小部件也会填满整个水平屏幕空间。但是,如果写入了expand=0
但fill=Y
,则小部件大小保持不变。正确吗?是的,对于包含side=TOP
(默认)和BOTTOM
的小部件来说,这是正确的。对于side=LEFT
和RIGHT
,小部件将自动在Y
方向展开。您可以通过设置两者的fill=BOTH
和其中一个的side=LEFT
来查看。太棒了!尝试了side=LEFT
&side=RIGHT
,得到了您提到的结果。当然,这消除了关于填充
和扩展
选项的所有疑问。再次感谢!这是一个很好的视觉指南!虽然我并不完全同意expand=True否决了side=''.''.'
。当您只有一个小部件时(如示例中所示),情况可能是这样,但当您有多个小部件时,情况肯定不是这样。我改了。
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()