Tkinter b . pack ( fill = "y" )
from tkinter import *root=Tk()
root.geometry("444x333")
b=Button(root,text="杜苏芮",background="fuchsia")
b.pack(fill="y")
mainloop()
为什么不能得到如下的图形 ?
b.pack(fill="y") 为什么不能起作用 ? 根据您提供的代码,b.pack(fill="y") 指定了按钮 b 在垂直(y)方向上填充其可用空间。然而,由于没有其他组件或内容在窗口中占据空间,这种填充效果可能不会明显。
在您提供的代码中,窗口的大小为 "444x333",并且按钮 b 的文本为 "杜苏芮",背景颜色为 "fuchsia"。当您运行该代码时,您应该能够看到一个具有指定大小和颜色的按钮 b 嵌入在窗口中。
如果您希望填充有关的更多细节,例如将多个组件放置在窗口中,并使用 pack() 方法进行布局,请提供更详细的要求和期望,我将尽力提供更准确的帮助。
如果问题已经解决,请设置最佳答案 在这段代码中, b.pack(fill="y")无法起作用的原因是, fill参数只对容器(如 Frame)中的组件进行填充,对于 Button 这样的组件来说, fill参数并不起作用。
pack方法是用于管理和显示组件的几何布局管理器。它负责在容器中摆放组件,并根据指定的选项进行布局。
在这里,您创建了一个名为b的 Button 组件,并在其上设置了fill="y" ,希望该按钮在容器中垂直填充。然而,Button 组件并不接受fill参数,因此该选项不会影响按钮的显示。
如果您想要在垂直方向上填充组件,您可以考虑使用其他组件(例如 Frame)来实现该效果。这是因为fill参数对于容器来说是有效的,可以控制容器中的组件如何填充容器的可用空间。
以下是一个修改后的代码示例,用 Frame 来实现垂直填充效果:
from tkinter import *
root = Tk()
root.geometry("444x333")
frame = Frame(root)
frame.pack(fill="y")
b = Button(frame, text="杜苏芮", background="fuchsia")
b.pack(fill="y")
mainloop()
在这个修改后的代码中,我们创建了一个 Frame 组件作为容器,并将 Button 放置在这个 Frame 中。然后,我们对 Frame 使用fill="y" ,使得 Frame 在垂直方向上填充整个可用空间。这样就实现了类似垂直填充的效果。 在你提供的代码中,b.pack(fill="y") 是用来设置按钮 b 在垂直方向上填充整个可用空间。然而,由于你的窗口 root 的大小只是 "444x333",并且没有其他组件占据垂直空间,所以无法看到按钮在垂直方向上的填充效果。
如果你想要看到 b.pack(fill="y") 的效果,可以根据需要扩大窗口的高度或者在窗口中添加其他组件来占据垂直空间。例如,你可以尝试将窗口大小改为 "444x600",或者在按钮下方添加一个 Frame 组件来占据一部分垂直空间,让按钮的填充效果更加明显。
另外,需要注意的是,使用 fill="y" 仅在有额外可用空间时才会生效。如果窗口已经填满了可用空间,即使设置了 fill="y",按钮也不会继续增长。
希望这个解答对你有所帮助!如有任何进一步的问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
想得到如图的效果,就必须改为b.pack(fill="y",expand=True)
为什么必须添加 expand=True ?
from tkinter import *
root=Tk()
root.geometry("444x333")
b=Button(root,text="杜苏芮",background="fuchsia")
b.pack(fill="y",expand=1)
mainloop() "expand=True" 在 tkinter 窗口的 pack 布局管理器中起到了一个很重要的作用。
它决定了当父窗口的大小改变时,部件是否会增大。如果 expand=True,那么部件就会填充他的父部件在x和y方向上的额外空间。如果 expand=False(默认值),那么部件将保持它的原始尺寸,而不会扩展到父部件未使用的空间。
在你这个例子中,假设我们将 expand 设置为 False ,那么当我们尝试更改窗口的大小时,"Button" 控件就会保持原来的大小,并且不会去填充变大的窗口空间,也就不会得到预期的效果。而设置了 expand=True,按钮就会自动填充窗口的其他空间,使得按钮始终覆盖整个窗口高度,得到了和图描述一样的效果 本帖最后由 liuhongrun2022 于 2023-7-28 20:49 编辑
dragov 发表于 2023-7-28 20:43
想得到如图的效果,就必须改为b.pack(fill="y",expand=True)
为什么必须添加 expand=True ?
expand=True 的意思是如果有空白,就填满
因为 fill=X 是有剩余位置的,就自动填满了 本帖最后由 hellomyprogram 于 2023-7-28 20:53 编辑
因为摆在中间的组件默认的边界范围是在那一行,而要想做到将那一列填满,你需要将这个默认的边界范围扩大到整个界面。
类似于下图:
没有expand类似于下图:
左上上右上
左中心右
左下下右下
其中橙色的是边界范围之外,蓝色为边界范围之内,绿色是显示的区域。这时候添加fill="y"没有作用,因为边界范围之内就只有那么高。
而如果有了expand就是这样了:
左上上右上
左中心右
左下下右下
如果答案对你有帮助,请设置最佳答案 liuhongrun2022 发表于 2023-7-29 08:43
如果答案对你有帮助,请设置最佳答案
看了大家的回复,有些迷茫,为什么 pack(fill="x") 能起作用;而 pack(fill="y") 不能起作用,而必须改为pack(fill="y",expand=True) 才能起作用! 本帖最后由 liuhongrun2022 于 2023-7-29 10:26 编辑
dragov 发表于 2023-7-29 10:15
看了大家的回复,有些迷茫,为什么 pack(fill="x") 能起作用;而 pack(fill="y") 不能起作用,而必须改为 ...
因为 fill=X 会默认填充,fill=Y 不会默认填充,需要加上 expand=True 来填充 dragov 发表于 2023-7-29 10:15
看了大家的回复,有些迷茫,为什么 pack(fill="x") 能起作用;而 pack(fill="y") 不能起作用,而必须改为 ...
我的回答有没有解决你的问题? liuhongrun2022 发表于 2023-7-29 10:24
因为 fill=X 会默认填充,fill=Y 不会默认填充,需要加上 expand=True 来填充
pack(fill="both") 也不能起作用的,也需要改为pack(fill="both" , expand=True) 才能起作用,真的迷茫啊 ? 本帖最后由 liuhongrun2022 于 2023-7-29 11:01 编辑
dragov 发表于 2023-7-29 10:31
pack(fill="both") 也不能起作用的,也需要改为pack(fill="both" , expand=True) 才能起作用,真的迷茫 ...
来自小甲鱼:
其中,fill 选项是告诉窗口管理器该组件将填充整个分配给它的空间,BOTH 表示同时横向和纵向扩展,X 表示横向,Y 表示纵向;expand 选项是告诉窗口管理器将父组件的额外空间也填满。
默认下,pack 是将添加的组件依次纵向排列:
https://xxx.ilovefishc.com/forum/201505/26/012021xlzffvjsz47rrzfd.png
dragov 发表于 2023-7-29 10:31
pack(fill="both") 也不能起作用的,也需要改为pack(fill="both" , expand=True) 才能起作用,真的迷茫 ...
也就是说,只有fill=X会默认填充,剩下的fill=Y和fill=BOTH需要手动设置expand=True
页:
[1]