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

设计UI总共有三种方法去定位个元件在视窗内的位置,分别是pack方法、grid方法跟place方法,我会分成三篇文章来跟大家做介绍,今天就先来聊聊pack方法。

♠♣今天的文章大纲♥♦

  • side参数介绍
  • padx/pady参数跟ipadx/ipady参数还有fill参数与expand参数的介绍
  • expand参数的应用

pack() 为流水式排版,是最常使用到的方法,利用相对位置的概念去做控件的配置,这些参数并不一定要加,没有传入参数时会以预设值排版,常用参数有side、fill、expand、padx/pady、ipadx/ipady跟anchor

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

side参数介绍

import tkinter as tk
root = tk.Tk()

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

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.pack()#pack方法
L2.pack()#pack方法
L3.pack()#pack方法

root.mainloop()

这边的pack方法预设是TOP排列,也就是由上往下排
以下为执行结果⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047e6QkXDF0tv.jpg
pack方法有四种side参数值

  • TOP:预设,由上往下排
    上图为范例程序码与执行结果
  • BOTTOM:由下往上排
L1.pack(side='bottom')#pack方法
L2.pack(side='bottom')#pack方法
L3.pack(side='bottom')#pack方法

此为由下往上的bottom排列,明显看出与程序码写的顺序是相反的
执行结果⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047Rfn3VzGbG2.jpg

  • LEFT:由左往右排
L1.pack(side='left')#pack方法
L2.pack(side='left')#pack方法
L3.pack(side='left')#pack方法

这边是用left由左到右的排列
执行结果如下⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047K7iueTRVXw.jpg

  • RIGHT:由右往左排
L1.pack(side='right')#pack方法
L2.pack(side='right')#pack方法
L3.pack(side='right')#pack方法

此为由又到左排列的right
下图为执行结果⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047PtxljWCFHo.jpg

这些参数也可以混合使用,下面就举一个范例

L1.pack(side='bottom')#下往上排
L2.pack(side='right')#右往左排
L3.pack(side='left')#左往右排

将'I am Label'由下往上排,因此会在最下面;'Welcome'由右往左,因此排在右侧;而'Thank you'在最左,因为是由左往右排列
下图为执行结果⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047PXcV8IAGvr.jpg

padx/pady跟ipadx/ipadyn & fill与expand的介绍

  • padx/pady参数是设定控件边界与视窗边界的距离或是控件之间的距离
  • ipadx/ipady参数是设定标签文字标签边界的距离
  • fill参数是设定控件填满控件被分配的空间fill=X就是被分配的空间X轴不留白fill=Y就是被分配的空间Y轴不留白
  • expand参数是设定是否填满额外的视窗空间,预设为False
L1.pack(side='right',fill='y')#由右排到左,填满Y轴空间
L2.pack(side='right',padx='10')#由右排到左,跟左右两边距离10
L3.pack(side='right',fill='y')#由右排到左,填满Y轴空间

将'I am Label'由右往左排,填满此标签的分配空间;'Welcome'由右往左,与另外两个标签间隔10;而'Thank you'由右往左排,填满此标签的分配空间
下图为执行结果⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/201400477XJdktGFjp.jpg

接下来是加上ipadx/ipady参数的范例

L1.pack(side='right',padx='10',ipadx='20')#由右排到左,左右间隔10,文字跟标签边界间隔20
L2.pack(side='right',padx='10',ipady='20')#由右排到左,左右间隔10,文字跟标签边界间隔20
L3.pack(side='right')#由右排到左

padx/pady参数是会累加的,在'I am Label'後面加上padx=10,会发现在跟'Welcome'之间的间隔更宽了,是因为这里有两个10的距离
'I am Label'加上ipdx=20,X轴的文字跟标签边界间隔20
'Welcome'加上ipdy=20,Y轴的文字跟标签边界间隔20
执行结果如此图⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047hEcHtAxE6b.png

expand参数的应用

L1.pack(side='left',fill='x')
L2.pack(fill='both',expand=True)
L3.pack()

执行结果⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047g50sMSnNsG.png
拖曳视窗後⬇⬇⬇
https://ithelp.ithome.com.tw/upload/images/20210916/20140047FUpjtD9xik.png

最後来介绍anchor参数,如下图总共有九个位置可以设定
https://ithelp.ithome.com.tw/upload/images/20210916/20140047C5lQoApeHJ.png

这边就举例来解释

import tkinter as tk
root = tk.Tk()

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


yesLabel=tk.Label(root,text='YES',bg='#00008B',fg="#00FFFF",
            font=("Castellar",18,"bold"))
noLabel=tk.Label(root,text='NO',bg='#00008B',fg="#00FFFF",
            font=("Castellar",18,"bold"))


noLabel.pack(anchor='s',side='right',padx=10,pady=10)#从右开始南方位置
yesLabel.pack(anchor='s',side='right',pady=10,padx=10)#从右开始南方位置

root.mainloop()

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


以上就是pack()方法的介绍,有任何问题都欢迎留言讨论喔
明天就要来聊聊第二个grid()方法( ゚д゚)つ Bye
/images/emoticon/emoticon61.gif


<<:  [DAY03] 建立 Datastore 和 Dataset (上)

>>:  Day-17 就是要重现这一部!没有极限的 PS2!

资安认知-手机简讯钓鱼

「您的快递包裹已送达,请您查收.....」 因为近年来网路购物兴盛 许多人多多少少都会接获一则这样的...

阅读.evtx文件--关於从16进位看事件纪录这回事

事情来自某天我在找资料的过程中,看到有些大大提供了事件纪录档的文本说明,所以今天要来试着阅读.evt...

[铁人12:Day 29] 「AI 的未来十年」摘要 5:固有知识框架

知识表达 符号处理其中的一个关键技术是「知识表达 (knowledge representation...

Day 21 | 状态管理套件 MobX - 到底什麽是状态管理

状态管理? 在介绍 MobX 以前我想先来说一下什麽是「状态管理」 究竟为什麽我们需要「状态管理」,...

[Day1][笔记] 主题规划

前言 其实 React 众观这几届其实已经有很多大神写过文章,那为何我还要出来写呢?其实就是两个目的...