Python Tkinter Place布局管理器及用法

Place 布局就是别的 GUI 编程中的“绝对布局”要求程序显式地指定每个组件的绝对位置或相对于其他组件的位置。
如果要使用 Place 布局,调用相应组件 place() 该方法即可。在使用该方法时,还支持一些详细的选项,如下:
x:指定组件的 X 坐标。x 为 0 代表位于最左边。
y:指定组件的 Y 坐标。y 为 0 代表位于最右边。
relx:指定组件的 X 以父容器总宽度为单位的坐标 1.该值应在 0.0~1.0 之间,其中 0.0 窗户最左边的代表,1.0 代表位于窗口最右边,0.5 代表位于窗口中间。
rely:指定组件的 Y 坐标以父容器总高度为单位 1.该值应在 0.0~1.0 之间,其中 0.0 代表位于窗口顶部,1.0 代表位于窗口底部,0.5 代表位于窗口中间。
width:以指定组件的宽度 pixel 为单位。
height:以指定组件的高度 pixel 为单位。
relwidth:指定组件的宽度以父容器的总宽度为单位 1.该值应在 0.0~1.0 之间,其中 1.0 代表整个窗口的宽度,0.5 代表窗户宽度的一半。
relheight:指定组件的高度以父容器的总高度为单位 1.该值应在 0.0~1.0 之间,其中 1.0 代表整个窗口的高度,0.5 代表窗口高度的一半。
bordermode:属性支持“属性支持”inside”或“outside” 用于指定设置组件的宽度和高度时是否计算组件的框架宽度。
当使用 Place 在布局管理容器中的组件时,需要设置组件 x、y 或 relx、rely 选项,Tkinter 容器中坐标系统的起源 (0,0) 左上角,其中 X 轴向右延伸,Y 如图所示,轴向向下延伸

如果通过 x、y 指定坐标,单位就是 pixel(像素);如果通过 relx、rely 指定坐标以整个父容器的宽度和高度为基础 1.无论以何种方式指定坐标,通过图纸 1 不难发现,通过 x 指定的坐标值越大,组件越右;通过 y 指定的坐标值越大,组件就越低。
下面介绍一个使用方法 Place 布局的例子将动态计算每个示例 Label 通过大小和位置,通过 place() 方法设置各 Label 尺寸和位置。
#Python2.x使用这行
#fromTkinterimport*
#Python3.x使用这行
fromtkinterimport*
importrandom
classApp:
def__init__(self,master):
self.master=master
self.initWidgets()
definitWidgets(self):
#字符串元组的定义
books=('疯狂Python讲义#39;,'疯狂Swift讲义','疯狂Kotlin讲义',\
'疯狂Java讲义','疯狂Ruby讲义')
foriinrange(len(books)):
#生成三个随机数
ct=[random.randrange(256)forxinrange(3)]
grayness=int(round(0.299*ct[0]+0.587*ct[1]+0.114*ct[2]))
#将元组中的三个随机数格式化为16进制数,将其转化为颜色格式
bg_color="#%02x%02x%02x"%tuple(ct)
#创建Label,设置背景色和前景色
lb=Label(root,
text=books[i],
fg='White'ifgrayness<120else'Black',
bg=bg_color)
#使用place()设置label的大小和位置
lb.place(x=20,y=36+i*36,width=180,height=30)
root=Tk()
root.title("Place布局")
#设置窗口的大小和位置
#widthxheight+x_offset+y_offset
root.geometry("250x250+30+30")
App(root)
root.mainloop()在上述程序中排名第一 26 行代码是调用 place() 方法执行 Place 关键代码的布局。调用 place() 主要设置了方法 x(X 坐标)、y(Y 坐标)、width(宽度)、height(高度)这四个选项可以通过这四个边项来控制 Label 位置和大小。
为了增加一些兴趣,上述程序使用随机数计算 Label 根据背景颜色的灰度值计算组件的背景颜色 Label 组件的前景:如果 grayness 小于 125说明背景颜色较深,前景颜色为白色;否则说明背景颜色较浅,前景颜色为黑色。操作上述程序,可以看到如图所示的界面。

