如何设置Tkinter Frame坐标?绿色Frame位置异常问题咨询
Tkinter Frame 位置问题的分析与解决
嘿,我帮你捋清楚这两个问题哈!
1. 最核心的错误:绿色Frame放错容器了!
你写的绿色Frame代码里,master=masterFrame这明显写错啦!你本来想把它放进红色Frame里,但现在它的父容器是最外层的masterFrame,和红、蓝Frame平级,这就导致它的位置完全不受红色Frame的约束,自然会跑到窗口顶部居中的位置——因为默认pack的组件在父容器里就是从上到下、居中排列的。
修正方法:把绿色Frame的master改成redFrame,这样它才会被放进红色框里:
greenFrame = tk.Frame(master=redFrame, width=100, height=100, bg='green')
2. 为什么X轴位置不受padx影响?
假设你已经把父容器改对了,咱们来说说pack布局的逻辑:
当你用pack(side='bottom')时,组件会被定位到父容器的底部区域,但默认是水平居中对齐的。这时候你设置padx,只是在绿色Frame的左右两侧增加空白空间,但组件本身的居中状态没变,所以视觉上X轴位置看起来没变化——就像你给居中的盒子左右加了 padding,整个盒子还是居中的。
如果想让绿色Frame靠红色Frame的左侧,你有两个选择:
- 如果你想把它放在红色Frame的左侧(不管上下),直接把
side='left':greenFrame.pack(side='left', padx=0, pady=0) - 如果你想把它放在红色Frame的底部左侧,就需要加上
anchor='w'参数(w代表west,也就是左侧):
加上greenFrame.pack(side='bottom', anchor='w', padx=0, pady=0)anchor='w'后,组件就会靠父容器的左侧对齐,这时候再调整padx,就能看到X轴位置的变化啦!
修正后的完整示例代码
import tkinter as tk masterFrame = tk.Tk() masterFrame.geometry("600x400") # 红色与蓝色Frame并排 redFrame = tk.Frame(master=masterFrame, bg='red') redFrame.pack_propagate(0) redFrame.pack(fill='both', side='left', expand=True) blueFrame = tk.Frame(master=masterFrame, bg='blue') blueFrame.pack_propagate(0) blueFrame.pack(fill='both', side='right', expand=True) # 绿色Frame放入红色Frame,底部左侧对齐 greenFrame = tk.Frame(master=redFrame, width=100, height=100, bg='green') greenFrame.pack_propagate(0) greenFrame.pack(side='bottom', anchor='w', padx=10, pady=10) masterFrame.mainloop()
内容的提问来源于stack exchange,提问作者nn65
相关产品推荐
相关产品推荐

