设计UI总共有三种方法去定位个元件在视窗内的位置,分别是pack方法、grid方法跟place方法,我会分成三篇文章来跟大家做介绍,今天就先来聊聊pack方法。
♠♣今天的文章大纲♥♦
pack() 为流水式排版,是最常使用到的方法,利用相对位置的概念去做控件的配置,这些参数并不一定要加,没有传入参数时会以预设值排版,常用参数有side、fill、expand、padx/pady、ipadx/ipady跟anchor
❗❗❗ 要注意一个视窗中不能同时使用pack与grid排版,但place却可以与pack或grid同时使用 ❗❗❗
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排列,也就是由上往下排
以下为执行结果⬇⬇⬇
pack方法有四种side参数值
L1.pack(side='bottom')#pack方法
L2.pack(side='bottom')#pack方法
L3.pack(side='bottom')#pack方法
此为由下往上的bottom排列,明显看出与程序码写的顺序是相反的
执行结果⬇⬇⬇
L1.pack(side='left')#pack方法
L2.pack(side='left')#pack方法
L3.pack(side='left')#pack方法
这边是用left由左到右的排列
执行结果如下⬇⬇⬇
L1.pack(side='right')#pack方法
L2.pack(side='right')#pack方法
L3.pack(side='right')#pack方法
此为由又到左排列的right
下图为执行结果⬇⬇⬇
这些参数也可以混合使用,下面就举一个范例
L1.pack(side='bottom')#下往上排
L2.pack(side='right')#右往左排
L3.pack(side='left')#左往右排
将'I am Label'由下往上排,因此会在最下面;'Welcome'由右往左,因此排在右侧;而'Thank you'在最左,因为是由左往右排列
下图为执行结果⬇⬇⬇
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'由右往左排,填满此标签的分配空间
下图为执行结果⬇⬇⬇
接下来是加上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
执行结果如此图⬇⬇⬇
L1.pack(side='left',fill='x')
L2.pack(fill='both',expand=True)
L3.pack()
执行结果⬇⬇⬇
拖曳视窗後⬇⬇⬇
最後来介绍anchor参数,如下图总共有九个位置可以设定
这边就举例来解释
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()
执行结果⬇⬇⬇
以上就是pack()方法的介绍,有任何问题都欢迎留言讨论喔
明天就要来聊聊第二个grid()方法( ゚д゚)つ Bye
<<: [DAY03] 建立 Datastore 和 Dataset (上)
>>: Day-17 就是要重现这一部!没有极限的 PS2!
「您的快递包裹已送达,请您查收.....」 因为近年来网路购物兴盛 许多人多多少少都会接获一则这样的...
事情来自某天我在找资料的过程中,看到有些大大提供了事件纪录档的文本说明,所以今天要来试着阅读.evt...
知识表达 符号处理其中的一个关键技术是「知识表达 (knowledge representation...
状态管理? 在介绍 MobX 以前我想先来说一下什麽是「状态管理」 究竟为什麽我们需要「状态管理」,...
前言 其实 React 众观这几届其实已经有很多大神写过文章,那为何我还要出来写呢?其实就是两个目的...