The Tkinter Pack Geometry Manager

The Tkinter Pack Geometry Manager [pack]

pack 常见用法

  • 将部件放到一个框架内, 并且充满整个框架
  • 部件自动摆放, on top of each other
  • 部件依次摆放, side by side

不要和 grid 混用

实例 Patterns

1. 充满整个框架 Filling the entire parent widget
from tkinter import *

root = Tk()

listbox = Listbox(root)
listbox.pack()

for i in range(20):
    listbox.insert(END, str(i))

mainloop()

默认情况下,listbox控件只显示10个项目。为显示更多项目,必须设置 fill 和 expand 选项,并且改变窗体尺寸大小。

from tkinter import *

root = Tk()

listbox = Listbox(root)
listbox.pack(fill=BOTH, expand=1)

for i in range(20):
    listbox.insert(END, str(i))

mainloop()

参数和说明

  • expand=bool
    • True(1), 窗体改变大小时,控件随之改变,否则 False(0) 时,控件大小不变。
  • fill=NONE or X or Y or BOTH
    • 当不是 NONE 时,控件的水平和(或)垂直方向随着窗体的改变而填充,即控件大小也会改变。
  • 当不设置以上参数或者不改变窗体大小时,可以在控件内滚动鼠标的滚轮以看到其他项目。

2. 部件自动安放 on top of each other

from tkinter import *

root = Tk()

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

mainloop()

使用参数 fill=X 横向填充部件

from tkinter import *

root = Tk()

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

mainloop()

3. 部件并排安放 side by side

from tkinter import *

root = Tk()

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

mainloop()

使用 side 参数来并排安放部件。 可以使用 fill=Y 使控件与窗体等高。

from tkinter import *

root = Tk()

w = Label(root, text="Red", bg="red", fg="white")
w.pack(side=LEFT, fill=Y)
w = Label(root, text="Green", bg="green", fg="black")
w.pack(side=LEFT, fill=Y)
w = Label(root, text="Blue", bg="blue", fg="white")
w.pack(side=LEFT, fill=Y)

mainloop()

参数 Reference

  • anchor
    • 锚点,部件内容在部件内部的对齐方式。
    • default默认值 anchor=CENTER
    • anchor=NSEW (or subset) - position widget according to given direction
  • expand
    • 确定控件是否与随着主窗体空间变大而扩充。
    • default默认值 expand=False
    • expand=bool - expand widget if parent size grows
  • fill
    • 确定控件是否填满主窗体提供给它的空间。
    • default默认值 fill=NONE
    • fill=NONE or X or Y or BOTH - fill widget if widget grows
  • ipadx Internal padding
    • 水平方向内部与边框的距离
    • Default默认值 ipadx=0
    • width不为空时,取其较大值。
  • ipady Internal padding
    • 垂直方向内部与边框的距离
    • Default默认值 ipady=0
    • height不为空时,取其较大值。
  • padx External padding
    • 水平方向部件边框与其他部件的距离
    • Default默认值 padx=0
  • pady External padding
    • 垂直方向部件边框其他部件的空间
    • Default默认值 pady=0
  • side
    • 部件在窗体上的方位,水平方向为 sticky=TOP, 垂直方向为 sticky=LEFT
    • 默认 sticky=TOP
    • side=TOP, LEFT, BOTTOM, RIGHT
    • 复杂的部件放置要用到Frame控件,不如用grid函数更简便。

相关函数

  • pack_forget()
    • 从当前管理器中去除部件,但是并不删除,可以重新显示或者被另一个管理器控制。
  • pack_info()
    • 返回包含相关参数名称及对应值的字典类型的值。
  • pack_propagate(flag)
    • 是否允许放置在主部件上的子部件改变大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值