布局组件
Frame 组件
Frame(框架)组件是在屏幕上的一个矩形区域。Frame 主要是作为其他组件的框架基础,或为其他组件提供间距填充。
Frame 组件主要用于在复杂的布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类。
选项 | 含义 |
---|---|
background | 1. 设置 Frame 组件的背景颜色2. 默认值由系统指定 3. 为了防止更新,可以将颜色值设置为空字符串 |
bg | 跟 background 一样 |
borderwidth | 1. 指定 Frame 的边框宽度2. 默认值是 0 |
bd | 跟 borderwidth 一样 |
class_ | 默认值是 Frame |
colormap | 1. 有些显示器只支持 256 色(有些可能更少),这种显示器通常提供一个颜色映射来指定要使用要使用的 256 种颜色 2. 该选项允许你指定用于该组件以及其子组件的颜色映射 3. 默认情况下, Frame 使用与其父组件相同的颜色映射4. 使用此选项,你可以使用其他窗口的颜色映射代替(两窗口必须位于同个屏幕并且具有相同的视觉特性) 5. 你也可以直接使用 "new" 为 Frame 组件分配一个新的颜色映射6. 一旦创建 Frame 组件实例,你就无法修改这个选项的值 |
container | 1. 该选项如果为 True ,意味着该窗口将被用作容器,一些其它应用程序将被嵌入 2. 默认值是 False |
cursor | 1. 指定当鼠标在 Frame 上飘过的时候的鼠标样式2. 默认值由系统指定 |
height | 1. 设置 Frame 的高度2. 默认值是 0 |
highlightbackground | 1. 指定当 Frame 获得焦点的时候高亮边框的颜色2. 默认值由系统指定 |
highlightthickness | 1. 指定高亮边框的宽度 2. 默认值是 0(不带高亮边框) |
padx | 水平方向上的边距 |
pady | 垂直方向上的边距 |
relief | 1. 指定边框样式 2. 默认值是 "flat" 3. 另外你还可以设置 "sunken" ,"raised" ,"groove" 或 "ridge" 4. 注意,如果你要设置边框样式,记得设置 borderwidth 或 bd 选项不为 0,才能看到边框 |
takefocus | 1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来) 2. 默认值是 False |
visual | 1. 为新窗口指定视觉信息 2. 该选项没有默认值 |
width | 1. 设置 Frame 的宽度 2. 默认值是 0 |
案例
python
import tkinter as tk
root = tk.Tk()
root.geometry("500x300+100+100")
left_frame = tk.Frame(root, width=250)
left_frame.pack(side=tk.LEFT)
tk.Label(left_frame, bg='red', width=10, height=2).pack(fill=tk.X)
tk.Label(left_frame, bg='blue', width=10, height=2).pack(fill=tk.X)
tk.Label(left_frame, bg='yellow', width=10, height=2).pack(fill=tk.X)
right_frame = tk.Frame(root)
right_frame.pack(side=tk.RIGHT)
tk.Label(right_frame, bg='red', width=2, height=10).pack(side=tk.LEFT)
tk.Label(right_frame, bg='blue', width=2, height=10).pack(side=tk.LEFT)
tk.Label(right_frame, bg='yellow', width=2, height=10).pack(side=tk.LEFT)
root.mainloop()
LabelFrame 组件
LabelFrame 组件是 Frame 框架的进化版,从形态上来说,也就是添加了 Label 的 Frame ,但有了它,Checkbutton 和 Radiobutton 的组件分组就变得简单了:
python
import tkinter as tk
root = tk.Tk()
root.geometry("500x300+100+100")
group = tk.LabelFrame(root, text='最好的脚本语言是?', padx=5, pady=5)
group.pack(side=tk.LEFT, padx=10, pady=10)
langs = [
('python', 1),
('perl', 2),
('ruby', 3),
('lua', 4),
]
v = tk.IntVar()
v.set(1)
for lang, no in langs:
b = tk.Radiobutton(group, text=lang, variable=v, value=no)
b.pack(anchor=tk.W)
info_frame = tk.Frame(root)
info_frame.pack(side=tk.RIGHT)
tk.Label(info_frame, text="数据日志").pack()
text_area = tk.Text(info_frame, height=20, width=100)
text_area.pack(side=tk.LEFT)
root.mainloop()