python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python tkinter Frame控件

python tkinter中的Frame控件用法详解

作者:微小冷

Tkinter中的Frame控件是一个用于组织和管理其他控件的容器,它可以将其他控件放置在自己内部,用于创建更复杂的用户界面,要创建一个Frame控件,可以使用Tkinter的Frame类,所以本文就通过一个简单的示例给大家介绍一下

Frame和LabelFrame控件

对于一个稍微复杂的软件,界面上肯定会划分多个功能区,每个功能区内部又有一些子功能区,如果直接用按钮在窗口中乱排,那么软件的设计逻辑就比较脑残。而为了实现这种套娃模式,tkinter提供了Frame控件,简单地说,Frame就是一个可以容纳控件的容器,有了这个,就可以窗口中套着大Frame,大Frame套小Frame这样套下去。

import tkinter as tk
win = tk.Tk()
for i in range(3):
    frm = tk.Frame(win)
    frm.pack(side=tk.LEFT, expand=tk.YES, fill=tk.Y)
    for j in range(3):
        btn = tk.Button(frm, text=f"{i,j}", width=10)
        btn.pack(side=tk.TOP,expand=tk.YES,fill=tk.X)
win.mainloop()

效果如下

在这里插入图片描述

当然,从感官上来说,上面的这种布局结构其实看不太出来应用了Frame组件。相比之下,LabelFrame就稍有特点。将上述绘图代码中的tk.Frame(win)改为tk.LabelFrame(win, text=f"第{i}列"),就可以得到下图

在这里插入图片描述

Frame参数

由于LabelFrame比Frame多了个标题,所以比Frame更复杂,简单起见,先介绍Frame的参数。一般Frame支持的参数,LabelFrame都支持。

首先,height和width用来设置宽度和高度;padx和pady用于设置水平和垂直方向上的边距。下面的表中给出了一些有关Frame边框的配色设置

选项含义
background/bg设置背景颜色,默认值由系统指定
borderwidth/bd指定的边框宽度,默认2像素
takefocus设为True时,可接受输入焦点,默认False
highlightbackground未获得焦点的时候高亮边框的颜色
highlightcolor获得焦点的时候高亮边框的颜色
highlightthickness指定高亮边框的宽度,默认1或2像素

下面设置一下背景色和边框

import tkinter as tk
def showFrames(frms):
    for i, frm in enumerate(frms):
        frm.pack(side=tk.LEFT, expand=tk.YES, fill=tk.Y)
        for j in range(3):
            btn = tk.Button(frm, text=f"{i,j}", width=10)
            btn.pack(side=tk.TOP,expand=tk.YES,fill=tk.X)
win = tk.Tk()
frms = [tk.Frame(win, bg='LightPink', bd=bd, takefocus=True,
    highlightbackground="gray", 
    highlightcolor="red",
    highlightthickness=bd,
    ) for bd in (2, 5, 10)]
showFrames(frms)
win.mainloop()

效果如下,当按下tab键时,可以看到被选中的Frame边框变红

在这里插入图片描述

LabelFrame参数

LabelFrame比Frame多了标题,相应多出来的参数基本都是有关文字设置的。

选项含义
text指定本,可以包含换行符
font文本字体
foreground/fg文本颜色
labelanchor文本显示位置,默认"nw"
labelwidget指定一个组件替代text

其中,labelanchor可选位置有"n", “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或 “center”,其ewsn代表东西南北,上北下南左西右东。

下面设置一下

win = tk.Tk()
frms = [tk.LabelFrame(win, text=lc, labelanchor=lc, bd=5, 
    fg='green', takefocus=True, highlightbackground="gray", 
    highlightcolor="red") for lc in ("nw", "s", "ne")]
showFrames(frms)
win.mainloop()

效果如下

在这里插入图片描述

到此这篇关于python tkinter中的Frame控件用法详解的文章就介绍到这了,更多相关python tkinter Frame控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文