2

Tkinter pack() grid() place()布局

 2 years ago
source link: https://ssjt21.github.io/2018/05/Python_TK_%E5%B8%83%E5%B1%80/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Tkinter pack() grid() place()布局

calendar.png2018-05-27 | 阅读:次

Tkinter 控件布局方式

  • pack()布局 不推荐
  • grid()布局 推荐使用
  • place()布局 极不推荐使用

grid()网格布局

  • row:指定控件的行,需要其控件占位
  • column:指定控件存放的列,需要其他控件占位
  • rowspan:合并行
  • columnspan:合并列
  • padx:横向填充内边距
  • pady:纵向填充内边距
  • ipadx:横向填充border
  • ipady:纵向填充border
  • sticky:控制网格大于控件大小时如何放置控件,(S,N,E,W,SE,SW,NE,NW,W+E+N+S:表示填充整个网格)
  • in_:将控件放到in_指定的控件上,不指定,默认是其父窗口

如果没有其他的控件,当创建一个控件时,你指定row=6,column=5,显示的位置仍然是左上角,除非有别的控件将位置撑开,否则看不到效果。

以上属性都可以通过=来赋值在grid()方法中,除此之外还可以通过 控件名称.grid_configure(**options)来设置。

grid网格布局中的一些方法

  • grid_configure(**options) 配置grid布局使用的属性值
  • grid_info() 返回对应控件中属性值,返回的是一个字典
  • grid_forget() 暂时隐藏控件,并没有销毁,还可以通过grid()再次显示,但是需要重新指定grid中options值.隐藏会打乱布局
  • grid_remove()和grid_forget()一样,不同的是grid_remove会存储options值,不用单独去存储之前控件grid中options值
  • grid_propagate(flag)默认情况控件会根据内容自动调整网格大小,flag=False的时候可以控制控件的大小
  • grid_size()返回控件所在的行和列 不太懂怎么用
  • grid_location(x,y)控件在屏幕中相对于容纳单元的(x,y)坐标,并返回grid系统中的哪个单元包含了该坐标(column,row)。 不太懂怎么用
  • grid_slaves(row=None, column=None) 返回插件管理的插件的list。如果没有提供任何参数,返回包含所有的插件的list。提供 row 参数,返回该行所有插件,提供 column 参数,则返回该列所有插件。
  • grid_box(column=None, row=None, col2=None, row2=None)如果只传递了 column 和 row 参数,返回的参数描述的是该行列的 单元 的大小。如果传递了 col2 和 row2 参数,返回的参数描述的就是从 column 列 到 col2 列,以及从 row 行 到 row2 行总体区域的大小。 不太懂怎么用
  1. (padx,pady) 和 (ipadx,ipady)对比
from Tkinter import  *
master=Tk()

master.geometry('200x200')

name_lab=Label(master,text="姓名:",bg='purple',width=40,height=5)
name_lab.grid(row=0,padx=10,pady=5)

password_lab=Label(master,text='密码:',bg='green',width=40,height=5)
password_lab.grid(row=1,ipadx=10,ipady=5)

master.mainloop()

grid-1-pad.jpg

  1. rowspan 和 columnspan对比
master=Tk()

master.geometry('200x200')
lab_1=Label(master,text='1',relief=GROOVE)
lab_1.grid(row=0,column=0)
lab_2=Label(master,text='2',relief=GROOVE)
lab_2.grid(row=1,column=0)
lab_3=Label(master,text='rowspan',relief=GROOVE,height=2)
lab_3.grid(row=0,column=1,rowspan=2)
lab_4=Label(master,text='cowspan',relief=GROOVE,width=10)
lab_4.grid(row=2,column=0,columnspan=2)

grid-2-span.jpg

  1. sticky指定控件在窗口中的位置
master.geometry('600x300')
lab_1=Label(master,text='1',relief=GROOVE,width=20,height=5)
lab_1.grid(row=0,column=0)
lab_2=Label(master,text='2',relief=GROOVE,width=20,height=5)
lab_2.grid(row=1,column=1)
lab_3=Label(master,text='3',relief=GROOVE,width=20,height=5)
lab_3.grid(row=0,column=2)
lab_3=Label(master,text='4',relief=GROOVE,width=20,height=5)
lab_3.grid(row=1,column=3)

lab_4=Label(master,text='4',relief=GROOVE,width=20,height=5)
lab_4.grid(row=2,column=0)
lab_5=Label(master,text='5',relief=GROOVE,width=20,height=5)
lab_5.grid(row=3,column=1)
lab_6=Label(master,text='6',relief=GROOVE,width=20,height=5)
lab_6.grid(row=2,column=2)
lab_7=Label(master,text='7',relief=GROOVE,width=20,height=5)
lab_7.grid(row=3,column=3)

#sticky=W
lab_w=Label(master,text='sticky=W',relief=GROOVE,bg='green')
lab_w.grid(row=0,column=1,sticky=W)

#sticky=E
lab_w=Label(master,text='sticky=E',relief=GROOVE,bg='green')
lab_w.grid(row=0,column=3,sticky=E)

#sticky=S
lab_w=Label(master,text='sticky=S',relief=GROOVE,bg='green')
lab_w.grid(row=1,column=0,sticky=S)

#sticky=N
lab_w=Label(master,text='sticky=N',relief=GROOVE,bg='green')
lab_w.grid(row=1,column=2,sticky=N)

#sticky=NE
lab_w=Label(master,text='sticky=NE',relief=GROOVE,bg='green')
lab_w.grid(row=2,column=1,sticky=NE)

#sticky=NW
lab_w=Label(master,text='sticky=NW',relief=GROOVE,bg='green')
lab_w.grid(row=2,column=3,sticky=NW)
#sticky=SE
lab_w=Label(master,text='sticky=SE',relief=GROOVE,bg='green')
lab_w.grid(row=3,column=0,sticky=SE)
#sticky=SW
lab_w=Label(master,text='sticky=SW',relief=GROOVE,bg='green')
lab_w.grid(row=3,column=2,sticky=SW)
master.mainloop()

grid-3-sticky.jpg

  1. 控件options获取和隐藏(grid_info(),grid_forget(),grid_remove())
master=Tk()

master.geometry('400x200')
lab_1=Label(master,text='Label_1',relief=GROOVE,width=20,height=5)
lab_1.grid(row=0,column=0)
v=StringVar()
lab_2=Label(master,textvariable=v,relief=GROOVE,width=20,height=5)
v.set('点我,隐藏控件Label_1')
lab_2.grid(row=1,column=1)
sign=False
options={}
def forget_label(evnet):
    global sign,options
    if sign:
        sign=False
        v.set('点我,隐藏 控件Label_1')
        lab_1.grid(**options)
    else:
        sign=True
        options=lab_1.grid_info()#获取options值,用于下次显示使用
        lab_1.grid_forget()#隐藏控件lab_1

        v.set('点我,显示 控件Label_1')

lab_2.bind('<Button-1>',forget_label)#绑定事件

master.mainloop()

grid-4-forget.gif

pack()

  • side:指定控件在父窗口的哪部分,默认值为TOP,可选值TOP,Bottom,LEFT,RIGHT
  • fill:指定控件如何在父窗口填充,默认值为None(不填充),可选值X,Y,BOTH,None
  • expand:指定控件是否进行填充,默认值为False,当设置控件布满主窗口时需要指定expand的值为True
  • anchor:指定控件放的位置,默认值是CENTER,N,W,E,S,NE,SE,NW,SW等
  • in_:指定控件属于那个控件
  • ipadx: 内边距x方向设置,默认值为0
  • ipady: 内边距y方向设置,默认值为0
  • padx: 外边距x方向设置,默认值为0
  • pady: 外边距y方向设置,默认值为0

以上属性都可以控过方法pack_configure(**options)来设定。

side使用

master=Tk()

master.geometry('400x300')

def creat_label(text,**kw):
    lab=Label(master,text=text,relief=GROOVE)
    lab.pack(**kw)
side={'LEFT':LEFT,'RIGHT':RIGHT,'TOP':TOP,'BOTTOM':BOTTOM}

for key,value in side.iteritems():
    creat_label('side='+key,side=value)
master.mainloop()

pack-4-side.jpg

pack() anchor 使用

master=Tk()
master.geometry('400x300')
def creat_label(text,**kw):
    lab=Label(master,text=text,relief=GROOVE)
    lab.pack(**kw)
anchor={'N':N,'W':W,'S':S,'E':E,}
# anchor={'NE':NE,'NW':NW,'SE':SE,'SW':SW,'CENTER':CENTER}
for key,value in anchor.iteritems():
    creat_label('anchor='+key,anchor=value)
master.mainloop()

pack-5-anchor1.jpg


pack-6-anchor2.jpg

pack() fill,expand使用

lab=Label(master,text="fill=BOTH",relief=GROOVE)
lab.pack(fill=BOTH)
lab=Label(master,text="fill=BOTH,expand=True",relief=GROOVE)
lab.pack(fill=BOTH,expand=True)s

pack-7-fill-expand.jpg

pack() (ipadx,ipady)和(padx,pady)

lab=Label(master,text="ipadx=10,ipady=5",relief=GROOVE,bg='red')
lab.pack(ipadx=10,ipady=5)
lab=Label(master,text="padx=10,pady=5",relief=GROOVE,bg='green')
lab.pack(padx=10,pady=5)

pack-8-pad.jpg

pack布局中的其他方法

  • pack_info():获取控件中的pack()中的值
  • pack_forget():隐藏控件,可以使用pack()重新让其再显示,但是需要重新指定pack中的属性值
  • pack_propagate(flag):设置控件大小固定,不会因为控件的内容控件无限扩展(设置成False)
  • pack_slaves():返归所属所有的子控件列表,注意,这个方法应该在主部件上调用,而不是在invidivual子部件上

place 布局

The Place geometry manager is the simplest of the three general geometry managers provided in Tkinter. It allows you explicitly set the position and size of a window, either in absolute terms, or relative to another window.

_place布局可以实现相对以及绝对位置布局,但是更改比较麻烦,往往牵一发而动全身,所以,这种方法的布局是最不建议使用的.这里给出在线文档地址,有兴趣的同学可以去了解一下,地址这里,这里不在详细介绍。

  • anchor:类比上面pack布局
  • bordermode:边框的样式,默认值INSIDE
  • height:设置布局的高
  • width:设置布局的宽
  • in_:设置控件归属的父控件
  • relheight:设置相对位置的高
  • relwidth:设置相对位置的宽
  • relx:x方向的距离,默认值为0
  • rely:y方向的距离,默认值为0
  • x:设置绝对位置的X坐标
  • y:设置绝对位置的y坐标

推荐Place学习的博客教程这里

place布局中方法

  • place_configure(**options):属性设置和修改
  • place_forget():和grid,pack的方法一样
  • place_info():和grid,pack的方法一样
  • place_slaves()
  • slaves() 同 place_slaves()一样

推荐阅读:

转载请注明:随时静听的博客 » 点击阅读原文


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK