tkinter布局:place, pack, grid

tkinter布局:place, pack, grid

Tkinter共有三种布局方案,分别是绝对位置布局place 相对位置布局pack和网格布局grid

place

place是通过声明具体位置来进行布局的方法,这个具体位置既可以绝对坐标,也可以是相对于父控件的百分比的相对坐标。

下面通过4label来演示一下place的布局方法。

import tkinter as tk

 

root = tk.Tk()

lb1 = tk.Label(root, text='(0,0)')

lb1.place(x=0, y=0, anchor=tk.NW)

lb2 = tk.Label(root, text='(100,100)')

lb2.place(x=15, y=15, anchor=tk.NW)

lb3 = tk.Label(root, text='rel(0.5,0.5)')

lb3.place(relx=0.5, rely=0.5, anchor=tk.CENTER)

lb4 = tk.Label(root, text='rel(0.5,0.5)+')

lb4.place(relx=0.5, rely=0.5, x=40, y=40,

    anchor=tk.NW)

root.mainloop()

效果如图所示

其中,( x , y ) (x,y)(x,y)是绝对坐标,lb1位于父控件中x = 0 , y = 0 x=0, y=0x=0,y=0的位置;lb1位于父控件的x = 100 , y = 100 x=100,y=100x=100,y=100的位置。

relx, rely是相对坐标,lb3x坐标是父控件宽度的0.5倍,也就是50%,相应地y坐标亦然。

lb4先通过相对坐标设定了一个位置,然后再用绝对坐标,以这个位置为原点,再设置绝对坐标。

pack

pack顾名思义,就是打包,如果把窗口想象成是一个箱子,那么打包肯定是哪里有空打哪里。比如最下面放了一层衣服,没地方放了只能放在第二层;如果第二层只放了一个砖头,那么其他位置还有空间,于是可以贴着砖头再放一个砖头。

下面通过pack在窗口中打包7个按钮

root = tk.Tk()

tk.Button(root,text='A').pack(side=tk.LEFT,expand=tk.YES,fill=tk.Y)

tk.Button(root,text='B').pack(side=tk.TOP,expand=tk.YES,fill=tk.BOTH)

tk.Button(root,text='C').pack(side=tk.RIGHT,expand=tk.YES,fill=tk.NONE)

tk.Button(root,text='D').pack(side=tk.LEFT,expand=tk.NO,fill=tk.Y)

tk.Button(root,text='E').pack(side=tk.TOP,expand=tk.YES,fill=tk.BOTH)

tk.Button(root,text='F').pack(side=tk.BOTTOM,expand=tk.YES)

tk.Button(root,text='G').pack(anchor=SE)

root.mainloop()

效果为

其中,A是第一个压入到窗口中的,其sidetk.LEFT,表示压到最左边,expandtk.YES,表示最大填充,fill=tk.Y表示沿着Y向填充。

B紧随其后,填充sideTOP,就是压到最上面,但由于晚来一步,已经被A占据的地盘自然抢不来了。其filltk.BOTH,说明向XY两个方向填充,所以BA看上去更加充实。

C向右填充,但是并没有选择fill,所以并没有填充,只能维持原本的尺寸。

后面的DEFG,都可以用同样的道理来理解。

grid

grid顾名思义就是网格,网格布局的好处是可以看上去更加规整,示例如下

root=tk.Tk()

tk.Label(root,text="First").grid(row=0)

tk.Label(root,text="Second").grid(row=1)#第二行

tk.Entry(root).grid(row=0,column=1)

tk.Entry(root).grid(row=1,column=1)

tk.mainloop()

效果如图所示

其实就对应表格

First

Entry( 0 , 1 ) (0,1)(0,1)

Second

Entry( 1 , 1 ) (1,1)(1,1)

其中,row用于声明所在行号,column声明所在列号,注意首行和首列均从0开始。

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒风5212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值