Python Tkinter详解 (十)控件的定位

前段时间看见有人问文本框的定位,翻看了之前的全部文章,发现关于控件的布局只用了最简单的pack(),当时只想越简单突显主题就好,没有详细讲解控件布局,现在补上。

通过前面的文档我们已经知道Tkinter控件的简单使用,想要拥有一个简洁、合理的界面,控件布局就显得尤为重要了,而Tkinter提供了三种布局方式给我们,下面一一讲解:

一、pack是一种相对布局方式,指定控件的相对位置,精确位置会由系统完成,如下:

from tkinter import *

window = Tk()

Label(window,text='first',bg='red').pack()
Label(window,text='second',bg='green').pack()
Label(window,text='third',bg='yellow').pack()

window.mainloop()

上面的pack布局没有任何属性参数,默认会自上而下垂直并且水平居中排列,我们通过背景色可以知道默认情况下,标签的宽度会随着文本长度的变化而变化,不同的背景色也方便观察下面的参数差异,接下来我们详细讲解一下pack的属性参数:

1、用side水平排列控件

from tkinter import *

window = Tk()

Label(window,text='first',bg='red').pack(side=LEFT)
Label(window,text='second',bg='green').pack(side=RIGHT)
Label(window,text='third',bg='yellow').pack(side=BOTTOM)

window.mainloop()

 Python Tkinter详解 (十)控件的定位_第1张图片
我们可以通过side=TOP/BOTTOM/LEFT/RIGHT,控制控件的相对位置(上下左右),注意这里的相对位置是以上一个控件的位置作为参照的,可以多用几个控件尝试一下就知道其中的奥妙了;

2、利用fill=x来是控件和窗体一样宽:

from tkinter import *

window = Tk()

Label(window,text='first',bg='red').pack(fill=X)
Label(window,text='second',bg='green').pack(fill=X)
Label(window,text='third',bg='yellow').pack(fill=X)
Button(window,text='fourth',bg='blue').pack(fill=X)

window.mainloop()

Python Tkinter详解 (十)控件的定位_第2张图片

2、用padx、pady、ipadx、ipady控制控件的边距

from tkinter import *

window = Tk()

Label(window,text='first',bg='red').pack(fill=X,padx=10)            #水平外边距
Label(window,text='second',bg='green').pack(fill=X,pady=10)         #垂直外边距
Label(window,text='third',bg='yellow').pack(fill=X,ipadx=10)        #水平内边距
Button(window,text='fourth',bg='blue').pack(fill=X,ipady=10)        #垂直内边距

window.mainloop()

Python Tkinter详解 (十)控件的定位_第3张图片

二、place与pack相反,是一种绝对位置布局方式,说的简单点就是坐标定位方式,窗体最左上角的位置就是原点(x=0,y=0)

from tkinter import *

window = Tk()

Label(window,text='first',bg='red').place(x=10,y=10)
Label(window,text='second',bg='green').place(x=10,y=40)
Label(window,text='third',bg='yellow').place(x=10,y=70)
Button(window,text='fourth',bg='blue').place(x=10,y=100)

window.mainloop()

Python Tkinter详解 (十)控件的定位_第4张图片

三、grid布局我们可以理解成单元格布局方式,窗体就像是一个表格,横向、纵向划分了若干格子,我们将控件依次放入格子中进行定位,这是相对pack和place折中的方法:

from tkinter import *

window = Tk()

Label(window,text='first',bg='red').grid(row=1,column=1)
Label(window,text='second',bg='green').grid(row=1,column=3)
Label(window,text='third',bg='yellow').grid(row=2,column=2)
Button(window,text='fourth',bg='blue').grid(row=3,column=1)

window.mainloop()

Python Tkinter详解 (十)控件的定位_第5张图片

三种控件布局方式各有千秋,我比较习惯使用place进行布局,这个还是看习惯和需求,大家有什么好的技巧也可以在下面留言,一起交流学习进步哈!

你可能感兴趣的:(Python,#,Python3,Tkinter)