0
点赞
收藏
分享

微信扫一扫

Tkinter place() 布局入门示例

笙烛 2023-10-09 阅读 57

几何管理

Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置

几何方法

描述

pack()

包装;

grid()

网格;

place()

位置;

 

B站视频教程:https://www.bilibili.com/video/BV1nu411D7ff/

 

place() 方法设置控件在窗体或窗口内的绝对地址或相对地址。

1. place()方法参数选项

Place 布局就是其他 GUI 编程中的“绝对布局”,这种布局方式要求程序显式指定每个组件的绝对位置或相对于其他组件的位置。

如果要使用 Place 布局,调用相应组件的 place() 方法即可。在使用该方法时同样支持一些详细的选项,关于这些选项的介绍如下:

参数

作用

anchor 

控制组件在 place 分配的空间中的位置

"n", "ne", "e", "se", "s", "sw", "w", "nw", 或 "center" 来定位(ewsn代表东西南北,上北下南左西右东)

默认值是 "nw"

bordermode 

指定边框模式("inside" 或 "outside")

默认值是 "inside"

height 

指定该组件的高度(像素)

in_ 

将该组件放到该选项指定的组件中

指定的组件必须是该组件的父组件

relheight 

指定该组件相对于父组件的高度(relative height)

取值范围 0.0 ~ 1.0

relwidth 

指定该组件相对于父组件的宽度(relative width)

取值范围 0.0 ~ 1.0

relx 

指定该组件相对于父组件的水平位置(relative x)
取值范围 0.0 ~ 1.0

和anchor结合使用,指anchor所指的位置

rely 

指定该组件相对于父组件的垂直位置(relative y)
取值范围 0.0 ~ 1.0

和anchor结合使用,指anchor所指的位置

width 

指定该组件的宽度(像素)

x

指定该组件的水平偏移位置(像素)
如同时指定了 relx 选项,优先实现 relx 选项

和anchor结合使用,指anchor所指的位置

y

指定该组件的垂直偏移位置(像素)
如同时指定了 rely 选项,优先实现 rely 选项

和anchor结合使用,指anchor所指的位置

 

当使用 Place 布局管理容器中的组件时,需要设置组件的 x、y 或 relx、rely 选项,Tkinter 容器内的坐标系统的原点 (0,0) 在左上角,其中 X 轴向右延伸,Y 轴向下延伸,如图所示

Tkinter place() 布局入门示例_Click

 

如果通过 x、y 指定坐标,单位就是 pixel(像素);如果通过 relx、rely 指定坐标,则以整个父容器的宽度、高度为 1。不管通过哪种方式指定坐标,通过图 1 不难发现,通过 x 指定的坐标值越大,该组件就越靠右;通过 y 指定的坐标值越大,该组件就越靠下。

 

2. place()方法应用实例

 

from tkinter  import *
master = Tk()# creating Tk window
master.geometry("200x200")

# button widget
b1 = Button(master, text = "Click me !")
b1.place(relx = 1, y = 2, anchor = NE)

# label widget
l = Label(master, text = "I'm a Label")
l.place(anchor = NW)

# button widget
b2 = Button(master, text = "GFG")
b2.place(relx = 0.5, rely = 0.5, anchor = CENTER)

# infinite loop which is required to
# run tkinter program infinitely until an interrupt occurs
mainloop()

 

 

Tkinter place() 布局入门示例_Click_02

 

relx 和 anchor 配合起来用:

如果 relx=0,anchor=NE,那么,按钮的右侧边缘处于relx=0位置。

如果 relx=0,anchor=NW,那么,按钮的左侧边缘处于relx=0位置。

Tkinter place() 布局入门示例_控件_03

 

 

 

 如果 relx=0.1,anchor=NE,那么,按钮的右侧边缘处于relx=0.1位置。

 

Tkinter place() 布局入门示例_Click_04

 

 如果 relx=0.5,anchor=NE,那么,按钮的右侧边缘处于relx=0.5位置。

Tkinter place() 布局入门示例_控件_05

 

  如果 relx=0.9,anchor=NE,那么,按钮的右侧边缘处于relx=0.9位置。

Tkinter place() 布局入门示例_控件_06

 

  如果 relx=1,anchor=NE,那么,按钮的右侧边缘处于relx=1位置。

Tkinter place() 布局入门示例_ide_07

 

 如果 relx=0,anchor=NW,那么,按钮的左侧边缘处于relx=0位置。

Tkinter place() 布局入门示例_Click_08

 

 

from tkinter  import *
master = Tk()# creating Tk window
master.geometry("200x200")

# button widget
b1 = Button(master, text = "Click me !")
b1.place(x =100, y = 100, width=50,height=50, anchor = SW)

mainloop()

Tkinter place() 布局入门示例_Click_09

 

from tkinter  import *
master = Tk()# creating Tk window
master.geometry("200x200")

# button widget
b1 = Button(master, text = "Click me !")
b1.place(x =100, y = 100, width=50,height=50, anchor = NE)

mainloop()

 

 

Tkinter place() 布局入门示例_控件_10

 

 

Tkinter place() 布局入门示例_ide_11

 

 

 

Tkinter place() 布局入门示例_Click_12

 

 

 

 

 

下面的示例是使用 place() 方法创建两个按钮。第一个按钮的位置在距离窗体左上角的 (40,40) 坐标处,第二个按钮的位置在距离窗体左上角的 (140, 80) 坐标处。按钮的宽度均为 80 像素,高度均为 40 像素。

#place()方法
from tkinter import *
#主窗口
win = Tk()
#创建窗体
frame = Frame (win, relief=RAISED, borderwidth=2, width=400, height=300)
frame.pack(side=TOP, fill=BOTH,ipadx=5, ipady=5, expand=1)
#第一个按钮的位置在距离窗体左上角的(40,40)坐标处
button1 = Button ( frame, text="Button 1")
button1.place(x=40,y=40, anchor=W, width=80, height=40)
#第二个按钮的位置在距离窗体左.上角的(140,80) 坐标处
button2 = Button (frame, text="Button 2")
button2.place(x=140,y=80, anchor=W, width=80, height=40)
#开始窗口的事件循环
win. mainloop()

保存 demo1.pyw 文件后,直接双击运行该文件,结果如图 1 所示:

Tkinter place() 布局入门示例_Click_13


图:程序运行结果

示例代码分析如下:

  • 第 6 行:创建一个 Frame 控件,以作为窗体。此窗体的外形突起,边框厚度为 2 像素。窗体的宽度是 400 像素,高度是 300 像素。
  • 第 7 行:此窗体在窗口的顶端(side=TOP),当窗口改变大小时,窗体会占满整个窗口的剩余空间(fill=BOTH)。widget 与窗体边界之间的水平距离是5像素,垂直距离是 5 像素。
  • 第 13~11 行:创建第一个按钮。位置在距离窗体左上角的(40, 40)坐标处,宽度是 80 像素,高度是 40 像素。
  • 第 14~15 行:创建第二个按钮。位置在距离窗体左上角的(140, 80)坐标处,宽度是 80 像素,高度是 40 像素。

 

当我们使用pack()或grid()管理器时,将两个不同的小部件彼此分开放置是非常容易的,但是将其中一个放置在另一个内部则有点困难。但这可以通过place()方法轻松实现。在place()方法中,我们可以使用in_选项将一个小部件放在另一个小部件内。

# Importing tkinter module
from tkinter import *

# creating Tk window
master = Tk()

# setting geometry of tk window
master.geometry("200x200")

# button widget
b2 = Button(master, text = "GFG")
b2.pack(fill = X, expand = True, ipady = 10)

# button widget
b1 = Button(master, text = "Click me !")

# This is where b1 is placed inside b2 with in_ option
b1.place(in_= b2, relx = 0.5, rely = 0.5, anchor = CENTER)

# label widget
l = Label(master, text = "I'm a Label")
l.place(anchor = NW)

# infinite loop which is required to
# run tkinter program infinitely
# until an interrupt occurs
mainloop()

 

Tkinter place() 布局入门示例_控件_14

 

 

 

 

 

REF

https://www.py.cn/jishu/jichu/10893.html

https://vimsky.com/examples/usage/python-place-method-in-tkinter.html



举报

相关推荐

0 条评论