布局管理器
grid表格布局,采用表格结构组织组件。子组件的位置由行和列的单元格来确定,并且可以跨行和跨列,从而实现复杂的布局。
grid()方法提供的选项:
column 单元格的列号 从 0 开始的正整数
columnspan 跨列,跨越的列数 正整数
row 单元格的行号 从 0 开始的正整数
rowspan 跨行,跨越的行数 正整数
ipadx, ipady 设置子组件之间的间隔(单元格之内组件的间隔), 非负浮点数,默认 0.0
x 方向或者 y 方向, 默认单位为像素
padx, pady 与之并列的组件之间的间隔(单元格之间组件的间隔), 非负浮点数,默认 0.0
x 方向或者 y 方向,默认单位是像素
sticky 组件紧贴所在单元格的某一角,对应于东南西北中以及 4 个角 n, s, w, e, nw, sw, se, ne, center(默认)
#coding=utf-8
from tkinter import *
from tkinter import messagebox
class Application(Frame):
def __init__(self,master):
super().__init__(master)
self.pack()
self.createWidget()
def createWidget(self):
self.label01=Label(self,text="用户名")
self.label01.grid(row=0,column=0)
self.entry01=Entry(self)
self.entry01.grid(row=0,column=1)
self.label02=Label(self,text="用户名为手机号")
self.label02.grid(row=0,column=2)
self.label03=Label(self,text="密码")
self.label03.grid(row=1,column=0)
self.entry02=Entry(self,show="*")
self.entry02.grid(row=1,column=1)
self.button01=Button(self,text="登录",command=self.login)
self.button01.grid(row=2,column=0)
self.button02=Button(self,text="取消",command=self.exitout)
self.button02.grid(row=2,column=2)
def login(self):
messagebox.showinfo("Message","登录成功")
def exitout(self):
exit(0)
if __name__=="__main__":
root=Tk()
root.title("grid布局管理")
root.geometry("500x300+300+200")
app=Application(root)
root.mainloop()
grid布局管理器.png
grid布局实现计算器界面
#coding=utf-8
'''
根据实际简易计算器的按键分布,设计一个相仿的计算器界 面,相应的功能暂不需要实现
实际可以设计成一个 7 行 4 列的表格布局,然后将相应的按钮放置进去即可
'''
from tkinter import *
class Application(Frame):
def __init__(self,master=None):
super().__init__(master)
self.pack()
self.createWidget()
def createWidget(self):
items=(("MC","M-","M+","MR"),
("C","±","/","×"),
(7,8,9,"-"),
(6,5,4,"+"),
(3,2,1,"="),
(0,"."))
#第一行为输入框,占满所有列,所以跨列columnspan=4
Entry(self).grid(row=0,column=0,columnspan=4,pady=10)
#enumerate(序列)可同时遍历该序列里的索引及元素,索引都是从0开始
for rindex,r in enumerate(items):
for cindex,c in enumerate(r): #子元素也是一个元组,可再次遍历索引和元素
if c=="=": #对"="要特殊处理,因为它跨行
Button(self, text=c,width=2).grid(row=rindex + 1, column=cindex,rowspan=2, sticky=NSEW)
elif c==0: #对"0"要特殊处理,因为它跨列
Button(self, text=c,width=2).grid(row=rindex + 1, column=cindex, columnspan=2, sticky=NSEW)
elif c==".": #对"."呀特殊处理,因为前面的0跨列,所以也要相应往后移一位即列加1
Button(self, text=c,width=2).grid(row=rindex + 1, column=cindex+1, sticky=NSEW)
else:
#外层索引加上1即为行(因为第一行已经被Entry()组件占用)
#内层索引即为每个元素的所在位置的列
Button(self,text=c,width=2).grid(row=rindex+1,column=cindex,sticky=NSEW)
if __name__=="__main__":
root=Tk()
root.title("grid布局实现计算器界面")
root.geometry("500x300+300+300")
app=Application(root)
root.mainloop()
grid布局实现计算器页面.png
网友评论