frame作用就是为了布局,将一组组件作为一个整体放在一个frame中,也方便对这一组组件进行控制。frame组件作为其他组件的框架,将布局分为一个个单独的空间,配合其他布局函数以实现复杂的界面布局。
语法:
Frame(父对象,参数列表,……)
Frame(master=none,**options)(class)
参数:
参数名称 | 属性 | 举例或备注 |
background或bg | 组件背景颜色 | |
borderwidth或bd | 边框宽度 | |
width | 宽度 默认:0 | |
height | 高度 | |
container | 是否作为容器,可嵌入其他应用程序。 默认:Flase | |
cursor | 在frame上时的鼠标样式。 取值可以是加号 plus 圆圈 circle等 默认:系统指定 | |
highlightbackground | 未获得焦点时,组件颜色。 默认:系统指定 | |
highlightcolor | 获得焦点时,组件的颜色。 默认:系统指定 | |
highlightthickness | frame组件厚度 默认:0 | |
padx | 横向边距 | |
pady | 纵向边距 | |
relief | 边框样式。 可选参数:sunken、raised、groove、ridge 默认:flat | |
takefocus | 是否接受输入焦点(tab键选择组件) 默认:假 | 默认如entry即使此值为假仍可获得焦点。label必须此值为真才可以。 |
代码综合示例:
import tkinter as tk root = tk.Tk() # 父框架,背景是白色高400,宽800,边10,横和纵边距为20和30,边框的风格是sunken。 frameMaster0 = tk.Frame(root,bg='white',height='400',width='800',bd='10',padx='20',pady='30',relief='sunken',) # takefocus 默认是否。焦点默认是不会访问标签控件,只有设置为true时,tab键才可用来选择框架内的控件。 # 经验证,takefocus使用0或1代表假或真。entry组件默认即使不通过takefocus设置仍然可以通过tab键访问。 frameMaster1 = tk.Frame(frameMaster0,bg='lightblue',height='400',width='500',bd='10',padx='20',pady='200',takefocus='1') # 鼠标移动到frameMaster2框架内变为加号 frameMaster2 = tk.Frame(frameMaster0,bg='red',height='200',width='200',bd='10',cursor='plus',) frameMaster3 = tk.Frame(frameMaster0,bg='green',height='200',width='200',bd='10',cursor='circle') frameMaster4 = tk.Frame(root,bg='orange',height='50',width='100',bd='10') frameMaster5 = tk.Frame(root,bg='green',height='80',width='120',bd='10') # 即使框架本身设置了宽、高等,仍然要考虑框架中组件的大小,会影响框架的实际大小。 label1 = tk.Label(frameMaster1,text='label1') btn1 = tk.Button(frameMaster1,text='btn1') entry1 = tk.Entry(frameMaster2,bd=5,width='20') entry2 = tk.Entry(frameMaster2,bd=5,width='20') frameMaster0.pack() # 设置frameMaster1排列在frameMaster0框架内的左侧。属性可以是LEFT RIGHT TOP BOTTOM frameMaster1.pack(side=tk.LEFT) frameMaster2.pack() frameMaster3.pack() frameMaster4.pack() frameMaster5.pack() label1.pack() btn1.pack() entry1.pack() entry2.pack() root.mainloop()