《tkinter实用教程五》tkinter ttk.Frame控件

本文详细介绍了Tkinter库中ttk.Frame控件的使用方法,包括创建Frame、设置padding参数以调整内部控件间距、设定边框样式以及填充整个窗口的技巧。通过实例代码展示了如何改变Frame背景色、设置内边距,并利用rowconfigure和columnconfigure实现自适应窗口大小。同时强调了将控件置于Frame中进行组织界面的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多《Tkinter 实用教程》系列文章

tkinter ttk.Frame 控件

本系列文章中提到的控件,特指 ttk 模块下的对应控件。

相比于前文提到的 ttk.Button 控件,ttk.Frame 控件可能相对陌生,实际上,Frame 控件是比 Button 更为基础的控件。

简单来讲,一个 Frame 就是一个展示单纯的矩形区域的控件,类似于 html 中的 div 标签。

从视觉上和编码上组织用户界面,是 Frame 的一个重要用途,我们通常把其他控件放置在 Frame 中,而不是直接放置在 Tk() 窗口中。

如何创建一个 Frame

创建 Frame 和创建其他控件的步骤一样,首先要创建 ttk.Frame 对象,然后把它放置在窗口中即可。

示例代码如下:

from tkinter import *
from tkinter import ttk

root = Tk()
s = ttk.Style()
s.configure("1.TFrame",background='red')
frame = ttk.Frame(root,style="1.TFrame",width=100,height=100)
frame.grid(column=0,row=0)

root.mainloop()

由于 ttk.Frame 默认风格在窗口中难以分辨位置,所以将其背景设置为红色。

代码执行结果如下:

在这里插入图片描述

ttk.Framepadding 参数

padding 参数用于指定位于 Frame 内部控件四周空间的大小。

简单讲,就是放置在 Frame 中的控件距离 Frame 边框的距离。

示例代码如下:

from tkinter import *
from tkinter import ttk

root = Tk()
s = ttk.Style()
s.configure("1.TFrame",background='red')
frame = ttk.Frame(root,style="1.TFrame",padding=(5,10,15,20)) # 左上右下的距离
btn = ttk.Button(frame,text="一个按钮")
btn.grid(column=0,row=0)
frame.grid(column=0,row=0)

root.mainloop()

执行结果如下图:

在这里插入图片描述

图中,按钮左侧、上侧、右侧和下侧的距离分别是 5、10、15、20。

如果以上代码换成

frame = ttk.Frame(root,style="1.TFrame",padding=5) # 四周

表示按钮四周距离都是5。

如果换成

frame = ttk.Frame(root,style="1.TFrame",padding=(5,10))

表示按钮左右距离是5,上下距离是10。

padding 参数值是一个数字,表示四周距离;如果是两个数字的元组,分别表示左右和上下。

ttk.Frame 样式和边框

Button 一样,Frame 也有边框样式,以下代码演示了如何设置 Frame 的样式。

from tkinter import *
from tkinter import ttk

root = Tk()
s = ttk.Style()
s.configure("1.TFrame",background='white',borderwidth=2,relief=SUNKEN)
frame = ttk.Frame(root,style="1.TFrame",padding=(5,10,15,20))
btn = ttk.Button(frame,text="一个按钮")
btn.grid(column=0,row=0)
frame.grid(column=0,row=0)

root.mainloop()

代码执行结果:

在这里插入图片描述

如果把 s=ttk.Style() 放在 root=Tk() 上方,会有奇怪的事情发生哦,不要这样做!!

ttk.Frame 占用整个窗口

上篇介绍 grid 布局时,遗留下了一个问题,如何让控件占据整个窗口,即使窗口被拖拽,也能及时填充呢?

答案是使用 rowconfingurecolumnconfiguresticky 参数相结合。

示例代码如下:

from tkinter import *
from tkinter import ttk

root = Tk()
s = ttk.Style()
s.configure("1.TFrame",background='red')
frame = ttk.Frame(root,style="1.TFrame",width=10,height=50)
frame.grid(column=0,row=0,sticky=(N,E,W,S))
root.rowconfigure(0,weight=1)
root.columnconfigure(0,weight=1)

root.mainloop()

代码执行结果:

在这里插入图片描述

拖拽窗口,使之变大后:

在这里插入图片描述

可见,Frame 已经完全填充了 root 窗口。

后继代码,我们的控件都会放置在 Frame 中,而不是直接放置在 root 窗口中,这样更符合实际开发习惯(更有利于风格控制)。

更多《Tkinter 实用教程》系列文章

### 关于 `ttk.Frame` 的使用方法 `ttk.Frame` 是 Tkinter 中的一个容器控件,用于组织其他小部件。通过设置样式和其他属性,可以实现更灵活的布局设计。 以下是关于如何使用 `ttk.Frame` 的详细说明以及示例代码: #### 基础用法 `ttk.Frame` 可以作为一个独立的小部件来承载其他子组件。它的基本参数包括但不限于以下内容: - **master**: 容器所在的父窗口或框架。 - **style**: 设置样式的名称,可以通过 `Style()` 配置不同的外观效果。 - **width/height**: 指定宽度和高度(注意,在网格管理器中这些值可能会被忽略)。 配置样式的具体方式如下所示[^1]: ```python from tkinter import * from tkinter import ttk root = Tk() # 创建并配置样式 s = ttk.Style() s.configure("Red.TFrame", background='red') # 初始化 Frame 并应用样式 frame = ttk.Frame(root, style="Red.TFrame", width=200, height=200) # 将 Frame 放入布局 frame.grid(column=0, row=0) root.mainloop() ``` 上述代码展示了如何定义一个红色背景的 `ttk.Frame`,并通过 `grid` 方法将其放置到主窗口中的指定位置。 --- #### 添加子控件至 `ttk.Frame` 除了作为单独的显示区域外,`ttk.Frame` 还常用来容纳其他控件。例如,可以在其中嵌套按钮、标签或其他复杂结构[^3]。 下面是一个完整的例子,演示了如何在一个自定义样式的帧内添加多个子控件: ```python import tkinter as tk from tkinter import ttk # 主窗体初始化 root = tk.Tk() root.title("ttk.Frame 示例") # 自定义样式 s = ttk.Style() s.configure('My.TFrame', background='#e1f5fe') # 浅蓝色背景 # 创建 Frame main_frame = ttk.Frame(root, padding=(10, 10), style='My.TFrame') main_frame.grid(row=0, column=0, sticky=(tk.N, tk.S, tk.E, tk.W)) # 向 Frame 内部添加 Label 和 Button 子控件 label_text = "这是一个带有子控件Frame" label = ttk.Label(main_frame, text=label_text) label.grid(row=0, column=0, pady=10) button = ttk.Button(main_frame, text="点击我") button.grid(row=1, column=0, pady=10) # 调整列权重以便扩展适应窗口大小 root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) root.mainloop() ``` 此程序创建了一个浅蓝色背景的 `ttk.Frame`,并在其内部布置了一段文字提示 (`Label`) 和一个交互按钮 (`Button`)。 --- #### 样式定制与高级功能 如果希望进一步增强界面美观度,则可通过修改主题或者调整特定属性完成个性化需求[^5]。例如更改边距 (padding) 或者引入更多复杂的视觉元素。 下面是另一个实例,重点在于利用额外的空间填充选项优化整体观感: ```python import tkinter as tk from tkinter import ttk root = tk.Tk() root.geometry("400x300") # 设定初始尺寸 # 新建 Style 实例对象 custom_style = ttk.Style() custom_style.theme_use('default') # 默认主题 custom_style.configure( 'Custom.TFrame', borderwidth=2, relief='groove' # 边框凹槽效果 ) outer_frame = ttk.Frame(root, style='Custom.TFrame', padding=[20, 15]) outer_frame.place(relx=0.5, rely=0.5, anchor=tk.CENTER) inner_label = ttk.Label(outer_frame, text="带边界线的 Frame 效果") inner_label.pack(pady=20) root.mainloop() ``` 这里设置了具有明显轮廓线条的外部框架,并且居中定位整个 UI 结构。 --- #### 总结 以上分别介绍了基础语法、组合运用场景以及进阶美化技巧等内容。借助 `ttk.Frame` 提供的强大灵活性,开发者能够轻松构建层次分明的应用图形界面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@魏大大

我们都没有打赏的习惯

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

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

打赏作者

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

抵扣说明:

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

余额充值