python 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控件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!