相关内容:
pack
介绍
常用参数
使用情况
常用函数
grid
介绍
常用参数
使用情况
常用函数
place
介绍
常用参数
使用情况
常用函数
首发时间: 2018-03-04 14:20
pack:
介绍:
pack 几何管理器按行或列打包小部件 可以使用填充 fill, 展开 expand 和靠边 side 等选项来控制此几何体管理器
pack 的排放控件的形式就像将一个个控件按大小从上到下放过去
在窗口不设定大小的而使用 pack 进行布局的情况下, 窗口默认大小为刚好包裹所有控件的大小
默认情况下添加的控件是居中且占据整行的
常用参数:
fill: 填充分配给控件的空间, fill:X 为填充 X 轴方向, Y 为 Y 轴方向, BOTH 为 X+Y
expand: 先按普通标准来规定控件大小, 如果后面窗口还剩下空间, 那么会分给那些 expand=True 的控件, 如图中是两个不同大小的按钮, 其中 2expand=True
, 当使用 expand=True 时, side 将不会生效!
side: 使控件靠窗口的指定方向并排, side 可取值 LEFT,RIGHT,TOP,BOTTOM.
anchor: 对齐方式, 可取值 n, s, w, e, nw, sw, se, ne, center(默认为 center)
ipadx, ipady: 内边距
padx,pady: 外边距
适用情况: 与 gird 相比, pack 有一定的局限性, 但在一些但很常见的情况下使用起来要容易得多:
将一个小部件放入一个框架 (或任何其他容器小部件) 中, 并让它填充整个框架
将多个小部件放在一起
并排放置一些小部件
补充:
常用函数:
pack_propagate(flag): 由窗口调用来配置 pack 控件时窗口的大小, 当 flag=0 时, 那么窗口大小将不再仅仅包裹住所有控件, 这时候窗口的高度和宽度设置才可以生效
pack_forget(): 移除控件, 但并没有进行摧毁, 可以再次使用 pack 或其他方式来显示
pack_info(): 返回 pack 提供的选项所对应得值
pack_slaves(): 以列表方式返回本组件的所有子组件对象
- from tkinter import *
- root=Tk()
- # for i in range(10):
- ##side
- # btn = Button(text=i)
- # btn.pack(side=LEFT)
- # btn.pack(side=RIGHT)
- # btn.pack(side=(TOP,LEFT))
- ####fill
- # btn.pack(fill=X)
- # btn.pack(side=LEFT,fill=Y)
- # btn.pack(fill=BOTH)
- ##expand
- # btn1=Button(text=1,bg=green)
- # btn2=Button(text=2,bg=yellow)
- # btn1.pack(fill=X)
- # btn2.pack(expand=True)
- #anchor:
- # btn1=Button(text=1,bg=green)
- # btn2=Button(text=2,bg=yellow)
- # btn1.pack(fill=X)
- # btn2.pack(anchor=E)
- #pack_propagete
- # btn1=Button(text=1,bg=green)
- # btn2=Button(text=2,bg=yellow)
- # root.pack_propagate(0)
- # btn1.pack()
- # btn2.pack()
- #pack_forget:
- # import time,threading
- # label=Label(text="警告!")
- # label.pack()
- # def run():
- # start_time=time.time()
- # while True:
- # if time.time()-start_time>3:
- # label.pack_forget()
- # break
- # t=threading.Thread(target=run)
- # t.setDaemon(True)
- # t.start()
- root.mainloop()
- grid:
介绍: grid 是格子的意思, grid 可以将控件区块式摆放.
常用参数:
row: 行号, 区分不同控件是否处于同一行
column: 列号, 区分不同控件是否处于同一列
sticky: 决定控件的贴靠方向, 该选项从集合 N,S,E,W [东南西北的意思], 中取一个或多个值比如要将标签与左边框对齐, 可以使用 W(西)
rowspan: 行跨度, 决定某个控件占的行数 , 默认一行
columnspan: 列跨度, 决定某个控件占的列数, 默认一列
ipadx, ipady: 内边距
padx,pady: 外边距
适用情况:
设计对话框的时候特别方便
区块化摆放的时候
补充:
常用函数:
grid_forget : 移除控件, 但并没有进行摧毁, 可以再次使用 grid 或其他方式来显示 [grid_remove 有同样作用]
grid_propagete: 由窗口调用来配置 pack 控件时窗口的大小, 当 flag=0 时, 那么窗口大小将不再仅仅包裹住所有控件, 这时候窗口的高度和宽度设置才可以生效
grid_slaves(): 以列表方式返回本组件的所有子组件对象
- from tkinter import *
- root=Tk()
- root.title("我的窗口")
- label_user=Label(text = 用户名:,bg=green)
- label_pwd=Label(text = 密码:,bg=green)
- user=Entry()
- pwd=Entry()
- # row,column,sticky
- label_user.grid(row=0,column=0,sticky=W) #一个有 sticky, 一个没有 sticky, 以作区分
- label_pwd.grid(row=1,column=0)
- # rowspan,columnspan
- user.grid(row=0,column=1)
- pwd.grid(row=1,column=1)
- btn=Button(text="提交")
- btn.grid(row=0,column=3,rowspan=2,columnspan=2,padx=5, pady=5)
- # 下面主要是将第一列拉大来显示上面 sticky 的效果
- v=IntVar()
- check=Checkbutton(text="下次自动登录",variable=v,)
- check.grid(row=2,column=0,sticky=W)
- # _forget:
- import time,threading
- label=Label(text="欢迎登录!",bg=blue)
- label.grid()
- def run():
- start_time=time.time()
- while True:
- if time.time()-start_time>3:
- label.grid_forget()
- break
- t=threading.Thread(target=run)
- t.setDaemon(True)
- t.start()
- root.mainloop()
- place:
介绍: 可以使用绝对的位置或相对位置来摆放控件
常用参数:
x: 控件在窗口中的 x 坐标
y: 控件在窗口中的 y 坐标
relx,rely: 与主窗口的相对位置, 比如
relwidth,relheight: 相对大小, 比如 height=0.5,width=0.5 时控件占据窗口的四分之一大小
适用情况:
自定义显示方式
将按钮定位在对话框中
补充:
常用函数:
place_forget(): 移除控件, 但并没有进行摧毁, 可以再次使用 place 或其他方式来显示
place_slaves(): 以列表方式返回本组件的所有子组件对象 [slaves() 具有同样功能]
place_info(): 返回 place 提供的选项所对应得值
- from tkinter import *
- root=Tk()
- root.geometry(100x100)
- label=Label(text="用户名:",bg=green)
- entry=Entry()
- label.pack(fill=X)
- #x,y
- # entry.place(x=0,y=0)
- #relx,rely
- # entry.place(relx=0.3, rely=0.3)
- # entry.place(relx=0.5, rely=0.5)
- #relheight,relwidth
- # entry.place(relx=0.5, rely=0.5,relheight=0.5,relwidth=0.5)
- #_forget:
- import time,threading
- label2=Label(text="警告!",bg=blue)
- label2.place(relx=0.2,rely=0.2)
- def run():
- start_time=time.time()
- while True:
- if time.time()-start_time>3:
- label2.place_forget()
- break
- t=threading.Thread(target=run)
- t.setDaemon(True)
- t.start()
- root.mainloop()
想要了解更多, 可以参考 tkinter 的官方文档: http://effbot.org/tkinterbook/
来源: http://www.bubuko.com/infodetail-2515190.html