6-Tkinter 组件-`Frame`框架控件

Frame框架控件

框架控件(Frame和LabelFrame),在屏幕上创建一块矩形区域,多作为容器来布局其他控件,比如标签、按钮、输入框等,都可用框架来布局。框架控件一般在布局很复杂的情况下使用,尤其是有很多控件需要使用的时候。可以把框架控件当成一种容器,里面可以存储各种控件。想象一下家里面衣柜的隔断或者架子,可以把不同衣物很好的归类放置,框架控件的作用就是这个效果。如果没有框架控件,很多复杂的布局难以完成或实现。

框架控件;在屏幕上显示一个矩形区域,多用来作为容器

Frame 组件主要用于在复杂的布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类。

Python Tkinter 框架(Frame)控件在屏幕上显示一个矩形区域,多用来作为容器。

语法

语法格式如下:

w = Frame(master=None, **options)
  • master: 框架的父容器。
  • options: 可选项,即该框架的可设置的属性。这些选项可以用键-值的形式设置,并以逗号分隔。
可选项描述
background/bg1. 设置 Frame 组件的背景颜色
2. 默认值由系统指定
3. 为了防止更新,可以将颜色值设置为空字符串
borderwidth/bd1. 指定 Frame 的边框宽度
2. 默认值是
3.bd框架的大小,默认为 2 个像素
colormap1. 有些显示器只支持 256 色(有些可能更少),这种显示器通常提供一个颜色映射来指定要使用要使用的 256 种颜色
2. 该选项允许你指定用于该组件以及其子组件的颜色映射
3. 默认情况下,Frame 使用与其父组件相同的颜色映射
4. 使用此选项,你可以使用其他窗口的颜色映射代替(两窗口必须位于同个屏幕并且具有相同的视觉特性)
5. 你也可以直接使用 “new” 为 Frame 组件分配一个新的颜色映射
6. 一旦创建 Frame 组件实例,你就无法修改这个选项的值
container1. 该选项如果为 True,意味着该窗口将被用作容器,一些其它应用程序将被嵌入
2. 默认值是 False
cursor1. 指定当鼠标在 Frame 上飘过的时候的鼠标样式
2. 默认值由系统指定
3.可以设置为 arrow, circle, cross, plus 等。
height1. 设置 Frame 的高度
2. 默认值是 0
width1. 设置 Frame 的宽度
2. 默认值是 0
highlightbackground1. 指定当 Frame 没有获得焦点的时候高亮边框的颜色
2. 默认值由系统指定,通常是标准背景颜色
highlightcolor1. 指定当 Frame 获得焦点的时候高亮边框的颜色
2. 默认值由系统指定
highlightthickness1. 指定高亮边框的宽度
2. 默认值是 0(不带高亮边框)
padx水平方向上的边距
pady垂直方向上的边距
relief1. 指定边框样式
2. 默认值是 “flat”
3. 可选的有:flatsunkenraisedgrooveridge。默认为 flat
4. 注意,如果你要设置边框样式,记得设置 borderwidth 或 bd 选项不为 0,才能看到边框
takefocus1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来)
2. 默认值是 False
visual1. 为新窗口指定视觉信息
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()

### Tkinter 组件使用方法及示例 #### Frame 和 LabelFrame 的使用 在构建用户界面时,`Frame` 和 `LabelFrame` 是两个非常重要的容器类组件。它们主要用于分组其他控件并提供额外的功能或视觉效果。 - **Frame**: 这是一个简单的矩形容器,通常用于将窗口中的小部件组织成逻辑区域。 ```python import tkinter as tk root = tk.Tk() frame = tk.Frame(root, bg="lightblue", width=200, height=100) frame.pack(padx=10, pady=10) label = tk.Label(frame, text="这是一个框架") label.pack() root.mainloop() ``` - **LabelFrame**: 类似于 Frame,但是带有标题栏,默认情况下会显示边框以及指定的文字说明。 ```python import tkinter as tk root = tk.Tk() labelframe = tk.LabelFrame(root, text="这是标签框架", padx=5, pady=5) labelframe.pack(fill="both", expand="yes") l = tk.Label(labelframe, text="内部的内容") l.pack() root.mainloop() ``` 上述代码展示了如何创建基本的 `Frame` 和 `LabelFrame` 并向其中添加子元素[^1]。 #### Place 布局管理器的应用场景 对于某些特定情况下的精确控制需求来说,`place()` 函数提供了绝对定位的能力。尽管它不如 `pack()` 或者 `grid()` 那样灵活高效,但在处理少量控件或是需要精确定位的情况下仍然十分有用。特别是当希望所有的小部件都能居中排列的时候,`place()` 可以简化很多工作流程[^2]。 下面的例子演示了怎样利用 `place()` 将按钮放置到屏幕中央: ```python import tkinter as tk def center_window(window): window.update_idletasks() w = window.winfo_width() h = window.winfo_height() ws = window.winfo_screenwidth() hs = window.winfo_screenheight() x = (ws/2) - (w/2) y = (hs/2) - (h/2) window.geometry('%dx%d+%d+%d' % (w, h, x, y)) root = tk.Tk() button = tk.Button(root, text='点击这里') center_window(button.master) button.place(relx=.5, rely=.5, anchor="c") root.mainloop() ``` 这段脚本定义了一个辅助函数来计算使窗口位于显示器中心所需的位置参数,并调用了 `place()` 来实现这一点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值