Python之tkinter 窗口控件配置管理员之place方法

简介

在设计GUI程序时,可以使用三种方法包装和定位各组件在容器窗口内的位置
这三种方法又称窗口控件配置管理员(Widget Layout Manager)

  • pack 方法
  • grid 方法
  • place 方法
place 方法

这是使用直接指定方式将控件放在容器(窗口)中的方法

语法格式:

place(options,...)

它的参数有height/widthrelx/relyx/yrelheight/relwidthbordermodeanchor

x/y 参数

place()方法类的x和y参数可直接设定窗口组件的左上方位置,单位是像素

窗口显示器的左上角是(x=0, y=0),X是向右递增,y是向下递增。

同时使用这种方法时,窗口将不会自动重设大小,而是使用默认的大小显示

例子

import tkinter

# 创建主窗口
root = tkinter.Tk()
lab1 = tkinter.Label(root, text="One",
                     bg="lightgreen",
                     width=8)
lab2 = tkinter.Label(root, text="Two",
                     bg="lightblue",
                     width=8)
lab3 = tkinter.Label(root, text="Three",
                     bg="lightyellow",
                     width=8)
lab1.place(x=0, y=0)
lab2.place(x=20, y=40)
lab3.place(x=50, y=80)

root.mainloop()

运行结果:
在这里插入图片描述
这个就是控件的左上角距离外轴跟x轴的距离

但是我们如果增加距离,窗口就不会因为控件变大而变大

例子

import tkinter

# 创建主窗口
root = tkinter.Tk()
lab1 = tkinter.Label(root, text="One",
                     bg="lightgreen",
                     width=8)
lab2 = tkinter.Label(root, text="Two",
                     bg="lightblue",
                     width=8)
lab3 = tkinter.Label(root, text="Three",
                     bg="lightyellow",
                     width=8)
lab1.place(x=0, y=0)
lab2.place(x=20, y=40)
lab3.place(x=170, y=80)

root.mainloop()

运行结果:
在这里插入图片描述

width/height 参数

有时候在设计窗口,应用程序时,所预留的空间有限,如果想要将图片插入窗口内,却担心图片太大,可以在插入图片的同时设定图片的大小,这样就很方便了。

这个时候我们就可以使用width/height参数了,这两个参数可以直接设定控件的实体大小

例子

import tkinter

# 创建主窗口
root = tkinter.Tk()
root.geometry("300x200")
img = tkinter.PhotoImage(file="1.png")
lab1 = tkinter.Label(root, image=img)
lab1.place(x=20, y=30, width=200, height=150)

root.mainloop()

运行结果:
在这里插入图片描述

当然,如果设置的大小太小了,也会导致图片变形挤压的

例子

lab1.place(x=20, y=30, width=100, height=60)

运行结果:

在这里插入图片描述

可以对比一下,很清楚,已经变形了

relx/rely 参数与relwidth/relheight 参数
  • relx/rely 参数可以设置相对于父容器(或者父窗口)的位置
  • relwidth/relheight 参数可以设置相对于父容器(或者父窗口)的大小

这个相对位置和相对大小是相对于父容器而言,其值为0.0~1.0

import tkinter

# 创建主窗口
root = tkinter.Tk()
root.geometry("150x120")
img = tkinter.PhotoImage(file="1.png")
lab1 = tkinter.Label(root, image=img)
lab1.place(x=20, y=30, relwidth=0.8, relheight=0.8)

root.mainloop()

运行结果:
在这里插入图片描述

如果达到了图片的原始大小,无论怎么拖拽都不会增大了

我们再改善一下

例子

lab1.place(relwidth=1, relheight=1)

这样或许看的更加直观一点

运行结果:
在这里插入图片描述

下面我们来看relx/rely

例子:

import tkinter

# 创建主窗口
root = tkinter.Tk()
img = tkinter.PhotoImage(file="1.png")
lab1 = tkinter.Label(root, image=img)
lab1.place(relx=0.5, rely=0.5)

root.mainloop()

运行结果:
在这里插入图片描述

相对于窗口的大小,来定位

我们这里是0.5,所以位置就是相对于窗口的0.5来算的

总结:
我们在做GUI设计时,虽然使用place方法可以很精准的设置控件的位置,但是我们一般不使用这个方法,尽量使用packgrid方法

因为如果我们用place方法,同时有新增或者减少组件时,又必须要重新设置组件的位置,这样会很不方便

谢谢观看,笔者会持续更新,如有错误或者建议,请私信我

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值