Day5 用python写UI-聊聊视窗控件配置管理员-place方法

今天要介绍place()方法,这个方法用到的机会比较少,将父容器左上角定为原点,直接指定控件要放的地方,所以缺点就是如果有一个控件要改位置,其他也必须一起改,因此比较常拿来做为客制化的版面管理上。常用参数有x/y、height/width、relx/rely、relwidth/relheight、bordermode 跟 anchor,其中必须设定定位参数 x/y 或 relx/rely,虽然没有传入任何参数也不会出现错误讯息, 但因为缺乏定位资讯, 因此元件也不会出现在视窗上。

❗❗❗ 要注意一个视窗中不能同时使用 pack 与 grid 排版, 但 place 却可以与 pack 或 grid 同时使用 ❗❗❗

♠♣今天的文章大纲♥♦

  • x/y跟height/width参数的使用
  • relx/rely、relwidth/relheight参数的使用
  • bordermode参数的使用

x/y跟height/width参数的使用

这两个参数是用绝对定位的方式去设定,也就是说当我们调整视窗大小时控件不会跟着移动位置
先示范如何用这两个参数,其实就跟前面pack跟grid方法一样,将要设定的指令写在括号内。

import tkinter as tk
root = tk.Tk()

root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('600x500')

L1=tk.Label(root,text='I am Label',bg='#DDA0DD',fg="#8B008B",
            font=("Viner Hand ITC",18,"bold"))
L2=tk.Label(root,text='Welcome',bg='#6495ED',fg="#AFEEEE",
            font=("Blackadder ITC",18,"bold"))
L3=tk.Label(root,text='Thank you',bg='#FFFACD',fg="#DAA520",
            font=("Algerian",18,"bold"))

L1.place(x=0,y=0,height=100,width=200)#位置在(0,0),高100宽200
L2.place(x=100,y=100,height=200,width=200)#位置在(100,100),高200宽200
L3.place(x=250,y=250,height=150,width=200)#位置在(150,150),高150宽200

root.mainloop()

这边先设定控件的xy位置,後面再设定控件的大小。
执行结果如下⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047MOrYGdHRqH.png

relx/rely、relwidth/relheight参数的使用

接下来这两个参数就是用相对位置的方式去定位,当移动视窗大小时控件会随着设定的相对位置去做移动。

import tkinter as tk
root = tk.Tk()

root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('500x600')

song=tk.PhotoImage(file="Ferris wheel.gif")
L1=tk.Label(root,image=song)

L1.place(relx=0.1,rely=0.1,relheight=0.8,relwidth=0.8)

root.mainloop()

执行结果如下⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047EHFxsGq24s.png

bordermode参数的使用

inside为预设值,表示其他选项引用父容器的内部,outside是外面。

import tkinter as tk
root = tk.Tk()

root.title('cuteluluWindow')
root.configure(bg="#7AFEC6")
root.iconbitmap('heart_green.ico')
root.geometry('300x100')

F1=tk.Frame(root, borderwidth=5, relief="ridge", width=90, height=50)
L1=tk.Label(F1, text="Welcome")
F2=tk.Frame(root, borderwidth=5, relief="ridge", width=90, height=50)
L2=tk.Label(F2, text="Welcome")


F1.pack()
F2.pack()
L1.place(x=10, y=10, bordermode="outside")#在父容器外
L2.place(x=10, y=10, bordermode="inside")#在父容器内

root.mainloop()

可以看到上面的Welcome偏左上,是因为设定bordermode为outside,下面的就是inside,位置就篇正中间的地方。
https://ithelp.ithome.com.tw/upload/images/20210916/201400474GkVK0USKS.png

一个视窗中不能同时使用 pack 与 grid 排版, 但 place 却可以与 pack 或 grid 同时使用喔~


以上就是Python Tkinter的三种版面配置,明天会进入Label的部分罗~
祝大家中秋节快乐~
/images/emoticon/emoticon35.gif
/images/emoticon/emoticon61.gif


<<:  Day5 中秋就是要继续烤肉阿-日式盐葱酱烧肉

>>:  D06 - Web Serial API 初体验

[Day29] 沟通之术 - 老板篇

今天是倒数第二天了~这个系列也快结束了,今天就以跟老板相处的过程时,老板给的提点来做个小结尾吧! 前...

使用 DOM Parser 取属性

讲完了怎麽取 tag 的值,我们来取 tag 夹带的属性。假设我们拿到了下面的 RSS 内容: &l...

分类模型哪个好?confusion matrix/sensitivity/ specificity

今天来整理一下以前的笔记,聊聊比较分类模型的评判依据:confusion matrix. 下图是常见...

[Day25] - Using Redux with Web Component

使用组件跟组件的组合 , 形成一个页面 势必会遇到经典的组件传值 issue (下图左侧) 以大家常...

作业系统L7-死结

作业系统L7-死结 死结特性 互斥:一次一个行程占用资源 占用与等候:至少一个行程占用资源且正等待其...