返回顶部
首页 > 资讯 > 后端开发 > Python >tkinter -- Place
  • 629
分享到

tkinter -- Place

tkinterPlace 2023-01-30 22:01:57 629人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

使用绝对坐标将组件放到指定的位置代码:import tkinter as tk root = tk.Tk() lb = tk.Label(root, text=

使用绝对坐标将组件放到指定的位置

代码:

import tkinter as tk
root = tk.Tk()
lb = tk.Label(root, text='hello place')
# 使用绝对坐标将 Label 放置到(0,0)位置上
lb.place(x=0,y=0,anchor='nw')
root.mainloop()

结果:

blob.png

x,y 指定组件放置的绝对位置



使用相对坐标放置组件位置

代码:

import tkinter as tk
root = tk.Tk()
lb = tk.Label(root, text='hello place')
# 使用相对坐标(0.5,0.5)将 Label 放置到(0.5*sx,0.5.sy)位置上
lb.place(relx=0.5,rely=0.5,anchor='center')
root.mainloop()

结果:

blob.png

relx,rely 指定组件放置的绝对位置,范围为(0-1.0)



使用 place 同时指定多个组件

代码:

import tkinter as tk
root = tk.Tk()
root.geometry('500x80')  # 设置初始root大小
v = tk.IntVar()  # 引用变量数字
lb = tk.Label(root, text='hello place')
# 使用相对坐标(0.5,0.5)将 Label 放置到(0.5*sx,0.5.sy)位置上
for i in range(5):
    tk.Radiobutton(root,
                   text='Radio'+str(i),
                   variable=v,
                   value=i,  # 设置变量值为i
                   ).place(x=80*i, anchor='nw')
root.mainloop()

结果:

blob.png

使用 place 来指定各个 Radiobutton 的位置



同时使用相对和绝对坐标

同时设置 relx,rely 和 x,y 的值

代码:

import tkinter as tk
root = tk.Tk()
root.geometry('500x200')  # 设置初始root大小
v = tk.IntVar()  # 引用变量数字
lb1 = tk.Label(root, text='hello place',fg='red')
lb2 = tk.Label(root, text='hello place',fg='blue')
# 先设置相对坐标为(0.5,0.5),再使用(5,10)将坐标作偏移(5,10)
lb1.place(relx=0.5,rely=0.5,anchor='center',x=5,y=10)

# 先设置相对坐标为(0.5,0.5),再使用(25,30)将坐标作偏移(25,30)
lb2.place(relx=0.5,rely=0.5,anchor='center',x=25,y=30)
root.mainloop()

结果:

blob.png

同时使用相对和绝对坐标时,相对坐标优先操作,然后是在这个相对坐标的基础上进行偏移



使用 in 来指定放置的容器

使用 in 属性来指定放置到的容器是那一个

代码:

import tkinter as tk
root = tk.Tk()
root.geometry('500x200')  # 设置初始root大小
v = tk.IntVar()  # 引用变量数字
lb1 = tk.Label(root, text='hello place',fg='red')
bt1 = tk.Button(root, text='hello button',fg='blue')
# 创建一个 Label
lb1.place(relx=0.5,rely=0.5,anchor='center')

# 在 root 同创建一个 Button,目的是与 bt1相比较
bt2 = tk.Button(root, text='button in root',fg='yellow')
bt2.place(anchor='w')
# 在 Label 中创建一个 Button
bt1.place(in_=lb1, anchor='w')
root.mainloop()

结果:

blob.png

注意 bt2放置的位置是在 root 的(0,0)处,而 button1放置的位置是在 lb1的(0,0)处,原因是由于 bt1使用了 in 来指定放置的窗口为 lb1



深入 in 用法

使用 in 属性来指定放置到的容器是那一个,仅能是其 master

代码:

import tkinter as tk
root = tk.Tk()

# 创建两个 Frame 用作容器
fm1 = tk.Frame(root,bg='red',width=40,height=40)
fm2 = tk.Frame(root,bg='blue',width=40,height=40)

# 再在 fm1中创建一个 fm3
fm3 = tk.Frame(root,bg='yellow',width=20,height=20)

# 创建一个 Label,它的 master 为 fm1
lb1 = tk.Label(fm1,text='hello place',fg='green')
lb1.place(in_=fm1, relx=0.5,rely=0.5,anchor='center')

# 创建一个 Button,它的 master 为 fm1
bt1 = tk.Button(fm1, text='hello place', fg='red')

# 将 bt1放置到 fm2中,程序报错
# 去掉下面这条语句就可以使用了,可以看到 lb1已经正确的放置到 fm1的中心位置了
# bt1.place(in_=fm2, anchor='w')

# 将 bt1放置到 fm3中,程序报错
# bt1.place(in_=fm3, anchor='w')

fm1.pack()
fm2.pack()
fm3.pack()
root.mainloop()

结果:

blob.png

in 不是可以随意指定放置的组件的,如果使用 in 这个参数这个组件必需满足:是其父容器或父容器的子组件



事件与 Place 结合使用

最后使用两个 place 方法来动态改变两个 Frame 的大小

代码:

import tkinter as tk
root = tk.Tk()
split=0.5  # 定义变量

# 创建两个 Frame 用作容器
fm1 = tk.Frame(root,bg='red',width=40,height=40)
fm2 = tk.Frame(root,bg='blue',width=40,height=40)

# 单击 fm1时增大它的占有区域0.1
def incFm1(event):
    global split
    if split < 1:
        split += 0.1
    fm1.place(rely=0,relheight=split,relwidth=1)
    fm2.place(rely=split, relheight=1-split, relwidth=1)

# 单击 fm2时增大它的占有区域0.1
def incFm2(event):
    global split
    if split > 0:
        split -= 0.1
        fm1.place(rely=0, relheight=split, relwidth=1)
        fm2.place(rely=split, relheight=1-split, relwidth=1)

# 这两语句要使用,不然开始看不到两个 frame,也就没法点击它们了
fm1.place(rely=0, relheight=split, relwidth=1)
fm2.place(rely=split, relheight=1-split, relwidth=1)

# 绑定单击事件
fm1.bind('',incFm1)
fm2.bind('',incFm2)

root.mainloop()

结果:

444.gif

为 SplitWindow 的原型了,再改动一下就可以实现一个 SplitWindow 了

--结束END--

本文标题: tkinter -- Place

本文链接: https://lsjlt.com/news/179115.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • tkinter -- Place
    使用绝对坐标将组件放到指定的位置代码:import tkinter as tk root = tk.Tk() lb = tk.Label(root, text=...
    99+
    2023-01-30
    tkinter Place
  • Python中tkinter无法同时显示多个image的解决方法及pack与place解析
    目录0、问题1、原因2、解决补充0、问题 在用Tkinter进行编程时,需要在一个Frame下显示多个图片,但是不管怎么设置都是只显示最后一张,就像这样: 代码 for i in r...
    99+
    2023-02-16
    Python tkinter无法同时显示多个image Python pack与place
  • ‘In Place’ 帮助MySQL5.0直接升级至5.7
    下文主要给大家带来‘In Place’ 帮助MySQL5.0直接升级至5.7,希望这些内容能够带给大家实际用处,这也是我编辑‘In Place’ 帮助MySQL5.0直接升级至5.7这篇文章的主要目的。好了...
    99+
    2024-04-02
  • tkinter -- CheckButton
    Checkbutton 又称为多选按钮可以表示两种状态:On 和 Off,可以设置回调函数,每当点击此按钮时回调函数被调用一个简单的Checkbutton例子:示例:import tkinter as tk r...
    99+
    2023-01-30
    tkinter CheckButton
  • tkinter -- button1
    Button 功能触发事件一个简单的button应用示例:import tkinter as tk # 定义button的回调函数 def py3study():   ...
    99+
    2023-01-30
    tkinter
  • tkinter -- Entry
    Entry 用来输入单行文本示例:import tkinter as tk root = tk.Tk() tk.Entry(root, text='input &...
    99+
    2023-01-30
    tkinter Entry
  • tkinter -- RadioButton
    Radiobutton 为单选按钮,即在同一组内只能有一个按钮被选中,每当选中组内的一个按钮时,其它的按钮自动改为非选中态,与其他控件不同的是:它有组的概念不指定绑定变量,每个Radiobutton自成一组创建一个简单的Radiobutto...
    99+
    2023-01-30
    tkinter RadioButton
  • tkinter -- button2
    指定button的宽度和高度width:  宽度height: 高度使用三种方式:1 创建button对象时,指定宽度与高度2 使用属性width和height来指定宽度和高度3 使用configure方法来指定宽度与高度示例:i...
    99+
    2023-01-30
    tkinter
  • tkinter -- Scale
    Scale 为输出限定范围的数字区间,可以为之指定最大值,最小值及步距值创建一个Scale代码:import tkinter as tk root = tk.Tk() tk.Scale(ro...
    99+
    2023-01-30
    tkinter Scale
  • tkinter -- Scrollbar
    Scrollbar(滚动条),可以单独使用,但最多的还是与其它控件(Listbox,Text,Canva 等)结合使用创建一个Scrollbar代码:import tkinter as tk root&nbs...
    99+
    2023-01-30
    tkinter Scrollbar
  • tkinter -- Frame
    Frame 就是屏幕上的一块矩形区域,多是用来作为容器(container)来布局窗体创建Frame代码:import tkinter as tk root = tk.Tk() #&nbs...
    99+
    2023-01-30
    tkinter Frame
  • tkinter -- PanedWindow
    PaneWindow(面板)为一 gm,用来管理子 Widget向 PanedWindow 中添加 Pane代码:import tkinter as tk # 使用add方法 root =...
    99+
    2023-01-30
    tkinter PanedWindow
  • tkinter -- Message
    Message 也是用来显示文本的,用法与 Label 基本一样创建一个简单的 Message代码:import tkinter as tk root = tk.Tk() tk.Messag...
    99+
    2023-01-30
    tkinter Message
  • tkinter -- OptionMenu
    OptionMenu 为可选菜单,与 Combox 功能类似创建 OptionMenu代码:import tkinter as tk root = tk.Tk() v =&nbs...
    99+
    2023-01-30
    tkinter OptionMenu
  • tkinter -- Toplevel
    TopLevel 与 Frame 类似,但它包含窗体属性(如 Title)创建简单的Toplevel代码:import tkinter as tk root = tk.Tk() t1&nbs...
    99+
    2023-01-30
    tkinter Toplevel
  • tkinter -- Menu
    Tkinter 之 Menu ,菜单代码:import tkinter as tk root = tk.Tk() def hello():    &...
    99+
    2023-01-30
    tkinter Menu
  • tkinter -- Spinbox
    与Entry 类似,但可以指定输入范围值创建一个Spinbox代码:import tkinter as tk root = tk.Tk() # root.geometry('...
    99+
    2023-01-30
    tkinter Spinbox
  • tkinter -- Listbox
    Listbox 为列表框控件,它可以包含一个或多个文本项(text item),可以设置为单选或多选创建一个 Listbox,向其中添加三个 item示例:import tkinter as tk root&...
    99+
    2023-01-30
    tkinter Listbox
  • tkinter -- Grid
    实现机制是将 Widget 逻辑上分割成表格,在 指定的位置放置想要的 Widget 就可以了第一个 Grid 例子使用 grid 来布局组件代码:import tkinter as tk root ...
    99+
    2023-01-30
    tkinter Grid
  • tkinter -- Font
    Tkinter 中其它常用的一些功能字体使用改变组件的显示字体代码:import tkinter as tk root = tk.Tk() # 创建一个 Label fo...
    99+
    2023-01-30
    tkinter Font
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作