Tkinter布局pack方法中fill、side、expand参数交互逻辑疑问
import tkinter as tk window = tk.Tk() frame1 = tk.Frame(master=None, width=200, height=100, bg="red") frame1.pack(fill=tk.BOTH, side=tk.TOP, expand=False) frame2 = tk.Frame(master=None, width=100, height=50, bg="yellow") frame2.pack(fill=tk.BOTH, side=tk.TOP, expand=False) frame3 = tk.Frame(master=None, width=50, height=25, bg="blue") frame3.pack(fill=tk.BOTH, side=tk.TOP, expand=False) window.mainloop()
fill与side的交互
设置fill=tk.BOTH时,拖动窗口向下,组件仅水平填充(可通过窗口灰色背景看出),并未如预期实现垂直填充。
将所有Frame的side参数从tk.TOP改为tk.LEFT后,组件仅垂直填充,无法水平填充。
基于这两个实验,是否side参数会改变fill=tk.BOTH的行为,使其每次仅在单一方向生效?
后续测试:设置side=tk.LEFT时,将fill参数从tk.BOTH改为tk.Y,效果与tk.BOTH一致;改为tk.X时,组件既不水平填充也不垂直填充(符合预期)。
fill与expand的交互
若将所有Frame的expand设为True,无论side是tk.TOP还是tk.LEFT,之前未生效的填充方向现在都能实现双向填充。
有两个疑问:
- 是
expand=True让fill=tk.BOTH正常工作了? - 还是
fill=tk.BOTH仍未生效,由expand补全了失效方向的填充?
若是后者,tk.BOTH的存在意义是什么?因为它总会因side参数在某一方向失效,还需依赖expand=True补全?
内容的提问来源于stack exchange,提问作者Han Qi
相关产品推荐
相关产品推荐

