文章主要介绍Python-用户接口i编程中所涉及到的Frame组件容器的使用,通过实例展示具体用法,frame的作用在于窗口需要进行复杂的组件管理的时候用得上,如果某个面板真的很复杂,那么你可能就需要tkinter.Frame来帮助你管理组件了;Frame的好处在于你能模块化管理一个面板中的组件,组件包括很多,有输入框,按钮,多选框,标签,菜单等等

目录

环境声明:

写在前面:

Python中的组件容器--tkinter.Frame()

1.组件的初始化方法(同理于java构造器)源码:

2.初始化参数一---master:

3.初始化参数二---- cnf 和 **kw

实际操作


环境声明:

  • 操作系统:windows10
  • Python版本:3.7.4
  • 使用工具:pycharm-community-2019.2

写在前面:

像类似windows资源管理器的那种ui界面,咋们来分析分析,他会包括那些模块呢,我用一张图片来说明下吧

windows的资源管理器面板

windows的这个资源管理面板,如果我们只用组件添加到窗体中,不用模块管理,那么可以预知一下,windows资源管理器的组件都是无序的状态,什么叫无序的状态?那比如果说,假如资源管理器中只有以上图片中的侧边栏和主要板块,主要板块还有文件夹板块(快捷文件夹)和分区板块(磁盘驱动管理板块),那么如果不适用模块化管理,我在将窗口最大化的时候可不可能会变成这样子:

组件发生位置错乱

这个时候明显发生了组件位置错乱的情况,这点可以说明的是,文件夹面板和设备驱动器如果不放在一个组件容器中,那么肯定会发生组件位置错位的情况

Python中的组件容器--tkinter.Frame()

这样在窗体应用中,关于组件容器的概念应该理解了其作用了吧,那么在Python中,组件位于tkinter模块中,名字就叫做Frame的类(也可以理解为html中的frame标签,有一样的意义),我们在使用它的时候,需要进行初始化操作,也就是java中的构造方法需要的参数,必须的一个参数是父窗体对象引用,第二个参数是个字典类型的参数,这个参数就是用于设置组件容器的属性的。

1.组件的初始化方法(同理于java构造器)源码:

def __init__(self, master=None, cnf={}, **kw):
    """Construct a frame widget with the parent MASTER.

        Valid resource names: background, bd, bg, borderwidth, class,
        colormap, container, cursor, height, highlightbackground,
        highlightcolor, highlightthickness, relief, takefocus, visual, width."""

 我们可以看到的是,有三个参数

2.初始化参数一---master:

其中有个叫master的就是我们父容器,也可以叫做父窗体,我们在穿件组件容器的时候就必须要传入父容器,不然这个组件容器应该绘制到哪里呢?你说是吧!

3.初始化参数二---- cnf 和 **kw

那么第二个或者第三个都是字典参数,其实呢作用都是一样的,都会被解析为组件的配置字典集,源码中说的得很清楚,也就是方法体内部的说明性注释,百度翻译的意思是:

使用父主控形状构造一个框架小部件。
有效的关键字名称:background, bd, bg, borderwidth, class,colormap, container, cursor, height,highlightbackground,highlightcolor, highlightthickness, relief, takefocus, visual, width

这里的关键字名称就是设置项,见名知意的设置项就有背景(background,bg),边框线宽度(db、borderwidth),组件外部宽度(width),组件外部高度(height)等等

属性详解
选项含义
background,bg组件的背景颜色,默认系统指定。之所以用两个参数来表示,bg是为了方便,background是为了见名知意,设置样式就有了灵活性
bodorwidth,db组件边框线宽度,默认为0
height整个组件的高度,默认为0
cursor指定当鼠标在当前组件悬浮的时候的鼠标样式,默认由系统指定的
highlightbackground设置当 Frame 不是活动窗口的时候高亮边框的颜色
highlightcolor设置当 Frame 获得焦点的时候高亮边框的颜色
highlightthickness设置高亮边框的宽度
padx左右的内边距
pady上下的内边距
relief这是边框线的样式,当然你的边框属性(db,bodorwidth)为0的话,那等于看不见哈.默认值为‘flat’,其他可选值有‘sunken’、‘raised’、‘groove’、‘ridge’,这些属性名字可以见名知意哦
takefocus1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来)
2. 默认值是 False
colormap1. 有些显示器只支持 256 色(有些可能更少),这种显示器通常提供一个颜色映射来指定要使用要使用的 256 种颜色
2. 该选项允许你指定用于该组件以及其子组件的颜色映射
3. 默认情况下,Frame 使用与其父组件相同的颜色映射
4. 使用此选项,你可以使用其他窗口的颜色映射代替(两窗口必须位于同个屏幕并且具有相同的视觉特性)
5. 你也可以直接使用 "new" 为 Frame 组件分配一个新的颜色映射
6. 一旦创建 Frame 组件实例,你就无法修改这个选项的值

 

实际操作

from tkinter import *

# 创建顶级窗体,并且窗体标签栏显示topFrame
topFrame = Tk(className="topFrame")
# 设置组件容器属性字典集
sonFrameSetting = {
     # 设置边框线的宽度
    'bd': 3,
    # 设置容器组件的高度
    'height': 100,
    # 设置组件容器的宽度
    'width': 300,
    # 设置组件容器的背景颜色
    'background': 'blue',
    # 设置边框线样式
    'relief': 'ridge'
}
# 创建顶级窗口的组件容器,并传入组件属性
sonFrame = Frame(topFrame, sonFrameSetting);
# 绘制顶级窗体的组件容器
sonFrame.pack()
# 进入消息循环
topFrame.mainloop()

以上代码的绘制结果大概就是酱紫的啦

窗体绘制结果

你看到的全都是蓝色,是因为你的窗体里面只有一个组件,如果我们在窗体里面而不是组件容器里面放一个按钮组件就知道啦,现将代码改一改:

from tkinter import *

# 创建顶级窗体,并且窗体标签栏显示topFrame
topFrame = Tk(className="topFrame")
# 设置组件容器属性字典集
sonFrameSetting = {
    # 设置边框线的宽度
    'bd': 3,
    # 设置容器组件的高度
    'height': 100,
    # 设置组件容器的宽度
    'width': 300,
    # 设置组件容器的背景颜色
    'background': 'blue',
    # 设置边框线样式
    'relief': 'ridge'
}
# 创建顶级窗口的组件容器,并传入组件设置
sonFrame = Frame(topFrame, sonFrameSetting)
# 配置按钮属性
buttomSetting = {
    'text': '按钮哦'
}
# 新创建一个组件,用于放入到组件容器中
buttom = Button(topFrame, bottomSetting)
# 绘制按钮样式
buttom.pack()
# 绘制顶级窗体的组件容器
sonFrame.pack()
# 进入消息循环
topFrame.mainloop()

改完了后,就是酱紫的啦:

 

值得一看的参考链接:

Python Tkinter GUI编程组件及用法  ----c语言中文网

Tkinter 组件详解(五):Frame  ----csdn

更多推荐

python窗体应用学习----tkinter.Frame组件