位置布局是其他GUI编程中的“绝对布局”,需要程序明确指定每个组件的绝对位置或相对于其他组件的位置。
如果要使用 Place 布局,只需调用相应组件的 place() 方法即可。使用此方法时还支持一些详细的选项。这些选项的介绍如下:
x:指定组件的 X 坐标。x 为 0 代表位于最左边。
y:指定组件的 Y 坐标。y 为 0 代表位于最右边。
relx:指定组件的X坐标,在父容器的总宽度中。单位为 1,取值在 0.0 到 1.0 之间,其中 0.0 表示在窗口的最左侧,1.0 表示在窗口的最右侧,0.5 表示在窗口的中间.
依赖:指定组件的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指定,单位是像素;如果坐标由relx和rely指定,则整个父容器的宽高都是1。无论哪种方式指定坐标,从图1中不难发现,x指定的坐标值越大,组件越靠右; y指定的坐标值越大,分量越低。
下面介绍一个使用 Place 进行布局的例子,该示例将会动态计算各 Label 的大小和位置,并通过 place() 方法设置各 Label 的大小和位置。
# Python 2.x使用这行
#from Tkinter import *
# Python 3.x使用这行
from tkinter import *
import random
class App:
def __init__(self, master):
self.master = master
self.initWidgets()
def initWidgets(self):
# 定义字符串元组
books = ('疯狂Python讲义', '疯狂Swift讲义', '疯狂Kotlin讲义',\
'疯狂Java讲义', '疯狂Ruby讲义')
for i in range(len(books)):
# 生成3个随机数
ct = [random.randrange(256) for x in range(3)]
grayness = int(round(0.299*ct[0] + 0.587*ct[1] + 0.114*ct[2]))
# 将元组中3个随机数格式化成16进制数,转成颜色格式
bg_color = "#%02x%02x%02x" % tuple(ct)
# 创建Label,设置背景色和前景色
lb = Label(root,
text=books[i],
fg = 'White' if grayness < 120 else 'Black',
bg = bg_color)
# 使用place()设置该Label的大小和位置
lb.place(x = 20, y = 36 + i*36, width=180, height=30)
root = Tk()
root.title("Place布局")
# 设置窗口的大小和位置
# width x height + x_offset + y_offset
root.geometry("250x250+30+30")
App(root)
root.mainloop()
上述程序第26行代码是调用place()方法执行Place布局的关键代码。调用place()方法时,主要设置x(X坐标)、y(Y坐标)、width(宽度)、height(高度)四个选项。通过这四个side item,可以控制每个Label的位置和大小。尺寸。
为了增加一些趣味,上面的程序使用随机数计算Label组件的背景色,根据背景色的灰度值计算Label组件的前景色:如果灰度小于125,背景颜色较深,前景色使用白色;否则,背景颜色较浅,前景色为黑色。运行上面的程序,可以看到如图所示的界面。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python 中的 scipy.linalg.inv() 函数是什么?09/06
- ♥ 图解 Python 中深浅拷贝(copy)02/08
- ♥ 学习python是否需要培训09/20
- ♥ 如何设置python函数参数的默认值09/22
- ♥ python如何输出日志?10/10
- ♥ 如何在python中设置csv的标题?08/30
内容反馈