Frame
框架控件
框架控件(Frame和LabelFrame),在屏幕上创建一块矩形区域,多作为容器来布局其他控件,比如标签、按钮、输入框等,都可用框架来布局。框架控件一般在布局很复杂的情况下使用,尤其是有很多控件需要使用的时候。可以把框架控件当成一种容器,里面可以存储各种控件。想象一下家里面衣柜的隔断或者架子,可以把不同衣物很好的归类放置,框架控件的作用就是这个效果。如果没有框架控件,很多复杂的布局难以完成或实现。
框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Frame 组件主要用于在复杂的布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类。
Python Tkinter 框架(Frame)控件在屏幕上显示一个矩形区域,多用来作为容器。
语法
语法格式如下:
w = Frame(master=None, **options)
- master: 框架的父容器。
- options: 可选项,即该框架的可设置的属性。这些选项可以用键-值的形式设置,并以逗号分隔。
可选项 | 描述 |
---|---|
background /bg | 1. 设置 Frame 组件的背景颜色 2. 默认值由系统指定 3. 为了防止更新,可以将颜色值设置为空字符串 |
borderwidth /bd | 1. 指定 Frame 的边框宽度 2. 默认值是 3. bd 框架的大小,默认为 2 个像素 |
colormap | 1. 有些显示器只支持 256 色(有些可能更少),这种显示器通常提供一个颜色映射来指定要使用要使用的 256 种颜色 2. 该选项允许你指定用于该组件以及其子组件的颜色映射 3. 默认情况下,Frame 使用与其父组件相同的颜色映射 4. 使用此选项,你可以使用其他窗口的颜色映射代替(两窗口必须位于同个屏幕并且具有相同的视觉特性) 5. 你也可以直接使用 “new” 为 Frame 组件分配一个新的颜色映射 6. 一旦创建 Frame 组件实例,你就无法修改这个选项的值 |
container | 1. 该选项如果为 True,意味着该窗口将被用作容器,一些其它应用程序将被嵌入 2. 默认值是 False |
cursor | 1. 指定当鼠标在 Frame 上飘过的时候的鼠标样式 2. 默认值由系统指定 3.可以设置为 arrow, circle, cross, plus 等。 |
height | 1. 设置 Frame 的高度 2. 默认值是 0 |
width | 1. 设置 Frame 的宽度 2. 默认值是 0 |
highlightbackground | 1. 指定当 Frame 没有获得焦点的时候高亮边框的颜色 2. 默认值由系统指定,通常是标准背景颜色 |
highlightcolor | 1. 指定当 Frame 获得焦点的时候高亮边框的颜色 2. 默认值由系统指定 |
highlightthickness | 1. 指定高亮边框的宽度 2. 默认值是 0(不带高亮边框) |
padx | 水平方向上的边距 |
pady | 垂直方向上的边距 |
relief | 1. 指定边框样式 2. 默认值是 “flat” 3. 可选的有: flat 、sunken 、raised 、groove 、ridge 。默认为 flat 。 4. 注意,如果你要设置边框样式,记得设置 borderwidth 或 bd 选项不为 0,才能看到边框 |
takefocus | 1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来) 2. 默认值是 False |
visual | 1. 为新窗口指定视觉信息 2. 该选项没有默认值 |
takefocus | 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来),默认为 false。 |
background(bg)
background 的属性是用来设置框架框架的背景颜色的。bg是缩写。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',width=100,height=100)
b1.pack()
root.mainloop()
框架控件就是在屏幕上创建一块矩形区域,用来容纳其它的控件。
borderwidth(bd)
borderwidth定义框架控件的边框宽度。bd是缩写形式。默认的边框宽度是0。可以通过设置该属性调整边框的宽度。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',bd=3)
b1.pack()
b2=tk.Entry(b1,width=20)
b2.pack()
root.mainloop()
说明:输入框边上的蓝色部分就是设置了边框之后的效果。如果没有设置边框的话,是没有蓝色部分的。
class
给框架控件指定一个class名称。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',bd=3,class_='good')
b1.pack()
b2=tk.Entry(b1,width=20)
b2.pack()
root.mainloop()
说明:因为class是Python的关键字,所以在这里要加上一个下划线’_’。
colormap
指定颜色映射。有些显示器只支持256种颜色(有些甚至更少)。这种显示通常提供一个颜色映射来指定使用哪256种颜色。此选项允许您指定用于此帧的颜色映射及其子部件。
默认情况下,一个新框架使用与其父相同的颜色映射。使用此选项,您可以重用另一个窗口的颜色映射(此窗口必须位于同一个屏幕上,且具有相同的视觉特性)。创建框架后,不能更改此选项。
container
container = True 的时候,不能在其中创建子控件。False的时候可以。如果为true,则此frame是容器小部件。默认为false。
cursor
鼠标经过框架控件时的形状,更多的信息见3.3.6节。
height 和width
设置框架控件的高和宽,单位是像素。不过如果有子控件,系统会根据子控件的大小来自动计算框架控件的大小,height和width属性就没有用了。
highlightbackground,highlightcolor和highlightthickness
这三个属性是配合使用的。highlightbackground是框架控件没有获得输入焦点时的边框颜色。如图一所示。highlightcolor是框架控件获得输入焦点时候的边框颜色。如图二所示。highlightthickness定义了边框的宽度。如果不定义这个边框的宽度,那么就不会显示highlightbackground和highlightcolor定义的颜,因为highlightthickness默认值是0。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',width=100,height=100,
highlightbackground='red',
highlightcolor='green',
highlightthickness=5,takefocus=1)
b1.pack()
b2=tk.Entry(root)
b2.pack()
root.mainloop()
padx和pady
设置框架控件的内边距。见前面章节的描述。
relief
设置边框的效果。具体的说明见3.3.5节。如果不定义borderwidth,则没有relief没有任何的效果。也就是说relief是对边框的美化效果,边框的宽度为0,那么relief自然就没有任何作用。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1 = tk.Frame(root,bg='blue',border=10,width=100,
height=100,relief=tk.GROOVE)
b1.pack()
root.mainloop()
takefocus
这个属性是设置框架控件能够获得输入焦点。takefocus=True表示可以获得输入焦点,takefocus=False表示不可以。默认值是False。
visual
定义如何显示框架。取值为:
best, directcolor, grayscale, greyscale, pseudocolor, staticcolor, staticgray, staticgrey, truecolor, 和default
不过很多的取值是针对过去低端的显示设备。目前只有best,truecolor和default还可以取值。其他的取值为产生异常。
实例
基本用法
import tkinter as tk
master = tk.Tk()
tk.Label(text="天王盖地虎").pack()
separator = tk.Frame(height=2, bd=1, relief="sunken")
separator.pack(fill="x", padx=5, pady=5)
tk.Label(text="小鸡炖蘑菇").pack()
master.mainloop()
面向对象写法
# coding = utf-8
# File date: Hi_2021/12/24 22:34
# File_name: 02_Frame面向对象创建GUI写法.py
from tkinter import *
from tkinter import messagebox
class Application(Frame):
def __init__(self, master=None):
# 初始化并调用父类初始化
super().__init__(master)
self.master = master
self.pack()
self.create_widget()
def create_widget(self):
"""创建组件"""
button_send_flowers = Button(self)
button_send_flowers["text"] = "点击送花"
button_send_flowers.pack()
button_send_flowers["command"] = self.send_flowers
# 创建一个退出按钮
button_quit = Button(self, text="退出", command=self.master.destroy)
button_quit.pack()
@staticmethod
def send_flowers():
messagebox.showinfo("Message_title", "送你一朵小红花!")
# 控制台打印
print("送你99朵玫瑰")
if __name__ == '__main__':
root = Tk()
root.geometry("200x200+600+500")
root.title("GUI窗口标题")
app = Application(master=root)
root.mainloop()