pack、grid 和 place 均用于管理同在一个父组件下的所有组件的布局,其中:
pack 是按添加顺序排列组件
grid 是按行/列形式排列组件
place 则允许程序员指定组件的大小和位置
何时使用 place 管理器?
通常情况下不建议使用 place 布局管理器,因为对比起 pack 和 grid,place 要做更多的工作。不过纯在即合理,place 在一些特殊的情况下可以发挥妙用。请看下边例子。
用法
将子组件显示在父组件的正中间:
import tkinter as tk
root = tk.Tk()
def callback():
print("正中靶心")
tk.Button(root, text="点我", command=callback).place(relx=0.5, rely=0.5, anchor="center")
root.mainloop()
在某种情况下,或许你希望一个组件可以覆盖另一个组件,那么 place 又可以派上用场了。下边例子我们演示用 Button 覆盖 Label 组件:
import tkinter as tk
root = tk.Tk()
photo = tk.PhotoImage(file = "Python.gif")
tk.Label(root, image = photo).pack()
def callback():
print("正中靶心")
tk.Button(root, text="点我", command=callback).place(relx=0.5, rely=0.5, anchor="center")
root.mainloop()
应该不难看出,relx 和 rely 选项指定的是相对于父组件的位置,范围是 00 ~ 1.0,因此 0.5 表示位于正中间。那么 relwidth 和 relheight 选项则是指定相对于父组件的尺寸:
import tkinter as tk
root = tk.Tk()
tk.Label(root, bg="red").place(relx=0.5, rely=0.5, relheight=0.75, relwidth=0.75, anchor="center")
tk.Label(root, bg="yellow").place(relx=0.5, rely=0.5, relheight=0.5, relwidth=0.5, anchor="center")
tk.Label(root, bg="green").place(relx=0.5, rely=0.5, relheight=0.25, relwidth=0.25, anchor="center")
root.mainloop()
上图无论你如何拉伸改变窗口,三个 Label 的尺寸均会跟着改变(神同步~)。x 和 y 选项用于设置偏移(像素),如果同时设置 relx(rely)和 x(y),那 place 将优先计算 relx 和 rely,然后再实现 x 和 y 指定的偏移值。
方法
注:下边所有方法适用于所有组件
place(**options)
-- 下方表格详细列举了各个选项的具体含义和用法:
选项 含义
anchor 1. 控制组件在 place 分配的空间中的位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或 "center" 来定位(ewsn代表东西南北,上北下南左西右东)
3. 默认值是 "nw"
bordermode 1. 指定边框模式("inside" 或 "outside")
2. 默认值是 "inside"
height 指定该组件的高度(像素)
in_ 1. 将该组件放到该选项指定的组件中
2. 指定的组件必须是该组件的父组件
relheight 1. 指定该组件相对于父组件的高度
2. 取值范围 0.0 ~ 1.0
relwidth 1. 指定该组件相对于父组件的宽度
2. 取值范围 0.0 ~ 1.0
relx 1. 指定该组件相对于父组件的水平位置
2. 取值范围 0.0 ~ 1.0
rely 1. 指定该组件相对于父组件的垂直位置
2. 取值范围 0.0 ~ 1.0
width 指定该组件的宽度(像素)
x 1. 指定该组件的水平偏移位置(像素)
2. 如同时指定了 relx 选项,优先实现 relx 选项
y 1. 指定该组件的垂直偏移位置(像素)
2. 如同时指定了 rely 选项,优先实现 rely 选项
place_configure(**options)
-- 跟 place() 一样
place_forget()
-- 将组件从屏幕中“删除”
-- 并没有销毁该组件,只是看不到了
-- 可以通过 place 或其他布局管理器显示已“删除”的组件
place_info()
-- 以字典的形式返回当前 place 的选项
place_slaves()
-- 以列表的形式返回该组件的所有子组件
-- 该方法仅适用于父组件
slaves()
-- 跟 place_slaves() 一样
————————————————
版权声明:本文为CSDN博主「来自江南的你」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41556318/article/details/85598710