Tkinter 布局管理器(一):pack

版权声明:转载请标明出处 https://blog.csdn.net/qq_41556318/article/details/85108464

Tkinter 布局管理器之pack

pack、grid 和 place 均用于管理同在一个父组件下的所有组件的布局,其中:

  • pack 是按添加顺序排列组件
  • grid 是按行/列形式排列组件
  • place 则允许程序员指定组件的大小和位置

何时使用 pack 管理器?

对比 grid 管理器,pack 更适用于少量组件的排列,但它在使用上更加简单(就像我们前边所有的例子中,展示一个组件我们一般都直接使用 .pack(),多简单~)。如果你需要创建相对复杂的布局结构,那么建议是使用多个框架(Frame)结构构成,或者使用 grid 管理器实现。

注意:不要在同一个父组件中混合使用 pack 和 grid,因为 Tkinter 会很认真地在那儿计算到底先使用那个布局管理器......以至于你等了半个小时,Tkinter 还在那儿纠结不出结果!

用法

我们常常会遇到的一个情况是将一个组件放到一个容器组件中,并填充整个父组件。这儿给大家举个例子,我们生成一个 Listbox 组件并将它填充到 root 窗口中:

import tkinter as tk
 
root = tk.Tk()

listbox = tk.Listbox(root)
listbox.pack(fill="both", expand=True)

for i in range(10):
        listbox.insert("end", str(i))
 
root.mainloop()

其中,fill 选项是告诉窗口管理器该组件将填充整个分配给它的空间,"both" 表示同时横向和纵向扩展,"x" 表示横向,"y" 表示纵向;expand 选项是告诉窗口管理器将父组件的额外空间也填满。

默认下,pack 是将添加的组件依次纵向排列:

import tkinter as tk
 
root = tk.Tk()

tk.Label(root, text="Red", bg="red", fg="white").pack(fill="x")
tk.Label(root, text="Green", bg="green", fg="black").pack(fill="x")
tk.Label(root, text="Blue", bg="blue", fg="white").pack(fill="x")
 
root.mainloop()

如果想要组件横向挨个儿排放,你可以使用 side 选项:

import tkinter as tk
 
root = tk.Tk()

tk.Label(root, text="Red", bg="red", fg="white").pack(side="left")
tk.Label(root, text="Green", bg="green", fg="black").pack(side="left")
tk.Label(root, text="Blue", bg="blue", fg="white").pack(side="left")
 
root.mainloop()

方法

注:下边所有方法适用于所有组件

pack(**options)

-- 下方表格详细列举了各个选项的具体含义和用法:

选项 含义
anchor 1. 控制组件在 pack 分配的空间中的位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或者 "center" 来定位(ewsn 代表东西南北,上北下南左西右东)
3. 默认值是 "center"
expand 1. 指定是否填充父组件的额外空间
2. 默认值是 False
fill 1. 指定填充 pack 分配的空间
2. 默认值是 NONE,表示保持子组件的原始尺寸
3. 还可以使用的值有:"x"(水平填充),"y"(垂直填充)和 "both"(水平和垂直填充)
in_ 1. 将该组件放到该选项指定的组件中
2. 指定的组件必须是该组件的父组件
ipadx 指定水平方向上的内边距
ipady 指定垂直方向上的内边距
padx 指定水平方向上的外边距
pady 指定垂直方向上的外边距
side 1. 指定组件的放置位置
2. 默认值是 "top"
3. 还可以设置的值有:"left","bottom","right"

pack_configure(**options)
-- 跟 pack() 一样

pack_forget()
-- 将组件从屏幕中“删除”
-- 并没有销毁该组件,只是看不到了
-- 可以通过 pack 或其他布局管理器显示已“删除”的组件

pack_info()
-- 以字典的形式返回当前 pack 的选项

pack_propagate(flag)
-- 如果开启,父组件会自动调节尺寸以容纳所有子组件
-- 默认值是开启(flag = True)
-- 该方法仅适用于父组件

pack_slaves()
-- 以列表的形式返回该组件的所有子组件
-- 该方法仅适用于父组件

猜你喜欢

转载自blog.csdn.net/qq_41556318/article/details/85108464