grid方法
这时一种以格状或者类似Excel电子表格方式包装和定位窗口组件的方法。grid方法的语法格式如下。
grid(options,···)
options参数可以是row、column、padx/pady、rowspan、columnspan、sticky。
row和column
样例:
from tkinter import *
window=Tk()
window.title("ch3_24")
''
lab1=Label(window,text="明志科技大学",
bg="lightyellow",
width=15)
lab2=Label(window,text="长庚大学",
bg="lightgreen",
width=15)
lab3=Label(window,text="长庚科技大学",
bg="lightblue",
width=15)
lab1.grid(row=0,column=0)
lab2.grid(row=1,column=0)
lab3.grid(row=1,column=1)
window.mainloop()
columnspan参数
可以设定控件在column方向的合并数量,在正式讲解cloumnspan参数功能前,下面先介绍建立一个含8各标签的应用。
from tkinter import *
window=Tk()
window.title("ch3_24")
''
lab1=Label(window,text="明志科技大学",
bg="lightyellow",
width=15)
lab2=Label(window,text="长庚大学",
bg="lightgreen",
width=15)
lab3=Label(window,text="长庚科技大学",
bg="lightblue",
width=15)
lab1.grid(row=0,column=0)
lab2.grid(row=1,column=0)
lab3.grid(row=1,column=1)
from tkinter import *
window=Tk()
window.title("ch3_26")
''
lab1=Label(window,text="标签1",relief="raised")
lab2=Label(window,text="标签2",relief="raised")
lab3=Label(window,text="标签3",relief="raised")
lab4=Label(window,text="标签4",relief="raised")
lab5=Label(window,text="标签5",relief="raised")
lab6=Label(window,text="标签6",relief="raised")
lab7=Label(window,text="标签7",relief="raised")
lab8=Label(window,text="标签8",relief="raised")
lab1.grid(row=0,column=0)
lab2.grid(row=0,column=1)
lab3.grid(row=0,column=2)
lab4.grid(row=0,column=3)
lab5.grid(row=1,column=0)
lab6.grid(row=1,column=1)
lab7.grid(row=1,column=2)
lab8.grid(row=1,column=3)
如果发生了标签2和标签3的区间是被一个标签占用的情况,此时就是使用columnspan参数的场合。
from tkinter import *
window=Tk()
window.title("ch3_27")
''
lab1=Label(window,text="标签1",relief="raised")
lab2=Label(window,text="标签2",relief="raised")
lab4=Label(window,text="标签4",relief="raised")
lab5=Label(window,text="标签5",relief="raised")
lab6=Label(window,text="标签6",relief="raised")
lab7=Label(window,text="标签7",relief="raised")
lab8=Label(window,text="标签8",relief="raised")
lab1.grid(row=0,column=0)
lab2.grid(row=0,column=1,columnspan=2)
lab4.grid(row=0,column=3)
lab5.grid(row=1,column=0)
lab6.grid(row=1,column=1)
lab7.grid(row=1,column=2)
lab8.grid(row=1,column=3)
window.mainloop()
rowspan参数
可以设定控件在row方向的合并数量
样例:
from tkinter import *
window=Tk()
lab1=Label(window,text="标签1",relief="raised")
lab2=Label(window,text="标签2",relief="raised")
lab3=Label(window,text="标签3",relief="raised")
lab4=Label(window,text="标签4",relief="raised")
lab5=Label(window,text="标签5",relief="raised")
lab6=Label(window,text="标签6",relief="raised")
lab7=Label(window,text="标签7",relief="raised")
lab8=Label(window,text="标签8",relief="raised")
lab1.grid(row=0,column=0)
lab2.grid(row=0,column=1,rowspan=2)
lab3.grid(row=0,column=2)
lab4.grid(row=0,column=3)
lab5.grid(row=1,column=0)
lab7.grid(row=1,column=2)
lab8.grid(row=1,column=3)
window.mainloop()
padx和pady参数
样例:增加标签的间距
from tkinter import *
window=Tk()
lab1=Label(window,text="标签1",relief="raised")
lab2=Label(window,text="标签2",relief="raised")
lab3=Label(window,text="标签3",relief="raised")
lab4=Label(window,text="标签4",relief="raised")
lab5=Label(window,text="标签5",relief="raised")
lab6=Label(window,text="标签6",relief="raised")
lab7=Label(window,text="标签7",relief="raised")
lab8=Label(window,text="标签8",relief="raised")
lab1.grid(row=0,column=0,padx=5,pady=5)
lab2.grid(row=0,column=1,padx=5,pady=5)
lab3.grid(row=0,column=2,padx=5,pady=5)
lab4.grid(row=0,column=3,padx=5,pady=5)
lab5.grid(row=1,column=0,padx=5)
lab6.grid(row=1,column=1,padx=5)
lab7.grid(row=1,column=2,padx=5)
lab8.grid(row=1,column=3,padx=5)
window.mainloop()
sticky参数
这个参数的功能类似anchor,但是只可以设定N/S/W/E。原则上相同column的Widget控件,如果宽度不同时,gird方法
会保留最宽的控件当作基准,这时比较短的控件会居中对齐,可参考下列实例:
from tkinter import *
window=Tk()
window.title("ch3_31")lab7=Label(window,text="标签7",relief="raised")
>>> lab8=Label(window,text="标签8",relief="raised")
>>> lab1.grid(row=0,column=0)
>>> lab2.grid(row=0,column=1,rowspan=2)
>>> lab3.grid(row=0,column=2)
>>> lab4.grid(row=0,column=3)
>>> lab5.grid(row=1,column=0)
>>> lab7.grid(row=1,column=2)
>>> lab8.grid(row=1,column=3)
window.mainloop()
#padx和pady参数
样例:增加标签的间距
>>> from tkinter import *
>>> window=Tk()
>>> lab1=Label(window,text="标签1",relief="raised")
>>> lab2=Label(window,text="标签2",relief="raised")
>>> lab3=Label(window,text="标签3",relief="raised")
>>> lab4=Label(window,text="标签4",relief="raised")
>>> lab5=Label(window,text="标签5",relief="raised")
>>> lab6=Label(window,text="标签6",relief="raised")
>>> lab7=Label(window,text="标签7",relief="raised")
>>> lab8=Label(window,text="标签8",relief="raised")
>>> lab1.grid(row=0,column=0,padx=5,pady=5)
>>> lab2.grid(row=0,column=1,padx=5,pady=5)
>>> lab3.grid(row=0,column=2,padx=5,pady=5)
>>> lab4.grid(row=0,column=3,padx=5,pady=5)
>>> lab5.grid(row=1,column=0,padx=5)
>>> lab6.grid(row=1,column=1,padx=5)
>>> lab7.grid(row=1,column=2,padx=5)
>>> lab8.grid(row=1,column=3,padx=5)
>>>window.mainloop()
#sticky参数
这个参数的功能类似anchor,但是只可以设定N/S/W/E。原则上相同column的Widget控件,如果宽度不同时,gird方法
会保留最宽的控件当作基准,这时比较短的控件会居中对齐,可参考下列实例:
>>> from tkinter import *
>>> window=Tk()
>>> window.title("ch3_31")
''
lab1=Label(window,text="明志工专")
lab2=Label(window,bg="yellow",width=20)
lab3=Label(window,text="明志科技大学")
lab4=Label(window,bg="aqua",width=20)
lab1.grid(row=0,column=0,padx=5,pady=5)
lab2.grid(row=0,column=1,padx=5,pady=5)
lab3.grid(row=1,column=0,padx=5)lab4.grid(row=1,column=1,padx=5)
执行后可以看到"明志工专"标签是居中对齐。
设置"明志工专"标签靠左对齐。
lab1.grid(row=0,column=0,padx=5,pady=5,sticky=W)
sticky参数的可能值N/S/W/E也可以组合使用。
sticky=N+S:可以拉长高度让控件在顶端和底端对齐。
sticky=W+E:可以拉长宽度让控件在左边和右边对齐。
sticky=N+S+E:可以拉长高度让控件在顶端和底端对齐,同时切齐右边。
sticky=N+S+W:可以拉长高度让控件在顶端和底端对齐,同时切齐左边。
sticky=N+S+W+E:可以拉长高度让控件在顶端和底端对齐,同时切齐左右边。
grid方法的应用
使用grid方法建立色彩标签的应用。
from tkinter import *
root=Tk()
root.title("ch3_35")
''
Colors=["red","orange","yellow","green","blue","purple"]
r=0
for color in Colors:
Label(root,text=color,relief="groove",width=20).grid(row=r,column=0)
Label(root,bg=color,relief="ridge",width=20).grid(row=r,column=1)
r+=1
root.mainloop()
rowconfigure()和columnconfigure()
在设计Widget控件的布局时,有时候会碰上窗口缩放大小,此时可以使用这两个方法设定第几个row或column的缩放比例。例如:
rowconfigure(0,weight=1) #row 0的控件当窗口改变大小时缩放比是1
columnconfigure(0,weight=1) #column 0的控件当窗口改变大小时缩放比是1
from tkinter import *
root=Tk()
root.title("ch3_35_1")
''
root.rowconfigure(1,weight=1)
root.columnconfigure(0,weight=1)
lab1=Label(root,text="Label 1",bg="pink")
lab1.grid(row=0,column=0,padx=5,pady=5)
lab2=Label(root,text="Label 2",bg="lightblue")
lab2.grid(row=0,column=1,padx=5,pady=5)
lab3=Label(root,bg="yellow")
lab3.grid(row=1,column=0,columnspan=2,padx=5,pady=5)
root.mainloop
增加设计lab1的sticky=W,让其可以切齐左边。同时让下方的标签可以对齐上、下、左、右。
from tkinter import *
root=Tk()
root.title("ch3_35_2")
''
root.rowconfigure(1,weight=1)
root.columnconfigure(0,weight=1)
lab1=Label(root,text="Label 1",bg="pink")
lab1.grid(row=0,column=0,padx=5,pady=5,stick=W)
lab2=Label(root,text="Label 2",bg="lightblue")
lab2.grid(row=0,column=1,padx=5,pady=5)
lab3=Label(root,bg="yellow")
lab3.grid(row=1,column=0,columnspan=2,padx=5,pady=5,
sticky=N+S+W+E)
root.mainloop()
通过上述执行结果可以得知下方的标签控件可以随着窗口大小更改,主要是设置"sticky=N+S+W+E"的结果。
至于sticky=W,会让lab1控件向左对齐。
网友评论