<div>
标签一样,把容器看做成一个框架,其他控件则是这个框架中的“元素”。属性 | 说明 |
---|---|
bg | 设置 Frame 的背景颜色 |
bd | 指定 Frame 的边框宽度 |
colormap | 指定 Frame 组件及其子组件的颜色映射 |
container | 布尔值参数,若参数值为 True,则窗体将被用作容器使用,一些其他程序也可以被嵌入。 |
cursor | 指定鼠标在 Frame 上飘过的鼠标样式,默认由系统指定 |
height/width | 设置 Frame 的高度和宽度 |
highlightbackground | 指定当 Frame 没有获得焦点的时候高亮边框的颜色,通常由系统指定为标准颜色 |
highlightcolor | 指定当 Frame 获得焦点的时候高亮边框的颜色 |
highlightthickness | 指定高亮边框的宽度,默认值是 0 |
padx/pady | 距离主窗口在水平/垂直方向上的外边距 |
relief | 指定边框的样式,参数值 "sunken","raised","groove" 或 "ridge","flat",默认为 "falt' |
takefocus | 布尔值参数,默认为 False,指定该组件是否接受输入焦点(即用户通过 Tab 键将焦点转移上来) |
import tkinter as tk win = tk.Tk() win.title("C语言中文网") win.geometry('400x350+200+200') win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico') # 在主窗口上添加一个frame控件 frame1 = tk.Frame(win) frame1.pack() # 在frame_1上添加另外两个frame, 一个在靠左,一个靠右 #左侧的frame frame_left = tk.Frame(frame1) tk.Label(frame_left,text='左侧标签1',bg='green',width=10,height=5).grid(row =0,column=0) tk.Label(frame_left,text='左侧标签2',bg='blue',width=10,height=5).grid(row = 1 ,column =1) frame_left.pack(side=tk.LEFT) frame_right = tk.Frame(frame1) tk.Label(frame_right,text='右侧标签1',bg='gray',width=10,height=5).grid(row = 0 ,column =1) tk.Label(frame_right,text='右侧标签2',bg='pink',width=10,height=5).grid(row = 1 ,column =0) tk.Label(frame_right,text='右侧标签3',bg='purple',width=10,height=5).grid(row= 1,column=1) frame_right.pack(side=tk.RIGHT) win.mainloop()程序运行结果:
图1:Frame控件布局管理
import tkinter as tk win = tk.Tk() win.title("C语言中文网") win.geometry('800x350+200+200') win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico') # 定义第一个容器,使用 labelanchor ='w' 来设置标题的方位 frame_left = tk.LabelFrame(win, text="教程", labelanchor="w",bg='#5CACEE') # 使用 place 控制 LabelFrame 的位置 frame_left.place(relx=0.2, rely=0.2, relwidth=0.2, relheight=0.5) label_1 = tk.Label(frame_left, text="C语言") label_1.place(relx=0.2, rely=0.2) label_2 = tk.Label(frame_left, text="Python") label_2.place(relx=0.6, rely=0.2) label_3 = tk.Label(frame_left, text="Java") label_3.place(relx=0.2, rely=0.6) label_4 = tk.Label(frame_left, text="C++") label_4.place(relx=0.6, rely=0.6) # 定义第二个容器,使用 labelanchor ='w' 来设置标题的方位 frame_right = tk.LabelFrame(win, text="辅导班", labelanchor="w",bg='#66CDAA') # 使用 place 控制 LabelFrame 的位置 frame_right.place(relx=0.5, rely=0.2, relwidth=0.3, relheight=0.6) label_1 = tk.Label(frame_right, text="C语言辅导班") label_1.place(relx=0.2, rely=0.2) label_2 = tk.Label(frame_right, text="数据结构") label_2.place(relx=0.6, rely=0.2) label_3 = tk.Label(frame_right, text="C++辅导班") label_3.place(relx=0.2, rely=0.6) label_4 = tk.Label(frame_right, text="Python答疑") label_4.place(relx=0.6, rely=0.6) win.mainloop()程序运行结果:
图2:LabelFrame容器控件
PanedWindow(master=None, **options)其中 master 表示父组件,即包裹该组件的上层组件。其常用属性如下表所示:
属性 | 说明 |
---|---|
handlepad |
1. 调节“手柄”的位置 2. 比如当 orient ='vertical' 设置垂直时,handlepad 表示“分割线”上的手柄与左端的距离,默认为 8 像素 |
handlesize | 设置“手柄”的尺寸(由于“手柄”必须是一个正方形,所以是设置正方形的边长)默认为 8 像素 |
opaqueresize |
1. 该选项定义了用户调整窗格尺寸的操作,如果该选项的值为 True(默认),窗格的尺寸随用户鼠标的拖拽而改变 2. 如果该选项的值为 False,那么窗格的尺寸,在用户释放鼠标时才会更新到新的位置上 |
orient | 指定窗格的分布方式,默认为水平方向分布("horizontal"),或者还可以设置为垂直纵向分布("vertical") |
relif | 指定边框的样式,默认为 "flat",还可以设置为 "sunken","raised","groove" 或 "ridge" |
sashpad | 设置每一条分割线到窗格间的间距 |
sashrelief | 设置分割线的样式,默认值是:"flat",还可以设置 "sunken","raised","groove" 或 "ridge" |
sashwidth | 设置分割线的宽度 |
showhandle | 设置是否显示调节窗格的手柄,默认为 False |
height/width | 设置 PanedWindow 的高度、宽度,若不设置,则其大小由其子组件的尺寸决定 |
方法 | 说明 |
---|---|
add(child) | 添加一个新的子组件到窗格中语法格式 add(child,**option),参数值 after、before、sticky |
forget(child) | 删除一个子组件 |
panecget(child, option) | 获得子组件指定选项的值 |
paneconfig(child, **options) | 设置子组件的各种选项 |
panes() | 将父组件中包含的子组件以列表的形式返回 |
sash_coord(index) | 返回一个二元组表示指定分割线的起点坐标 |
sash_place(index, x, y) | 将指定的分割线移动到一个新的位置 |
import tkinter as tk win = tk.Tk() win.title("C语言中文网") win.geometry('400x400+200+200') win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico') # 创建一个水平方向的 panedwindow,并添加到主窗口中,默认为水平方向 p_window1 = tk.PanedWindow(win) p_window1.pack(fill=tk.BOTH, expand=1) # 在窗口区的左侧添加两个水平方向的 Label left1 =tk. Label(p_window1, text='C语言中文网', bg='#7CCD7C', width=10,font=('微软雅黑',15)) p_window1.add(left1) left2 =tk.Label(p_window1, text='网址:task.lmcjl.com', bg='#9AC0CD', width=10,font=('微软雅黑',15)) p_window1.add(left2) # 创建一个垂直方向的panedwindow,并添加一个手柄,设置分割线样式 p_window2 = tk.PanedWindow(orient=tk.VERTICAL,showhandle=True,sashrelief='sunken') # 添加到 p_window1中 p_window1.add(p_window2) # 在 p_window2 中添加两个垂直方向的标签 top_label =tk. Label(p_window2, text='教程', bg='#7171C6', height=8,font=('宋体',15)) p_window2.add(top_label) bottom_label =tk. Label(p_window2, text='辅导班', bg='#8968CD',font=('宋体',15)) p_window2.add(bottom_label) win.mainloop()程序运行结果:
图3:PanedWindow空间布局
方法 | 说明 |
---|---|
deiconify() | 在使用 iconify() 或 withdraw() 方法后,即窗口最小化和移除窗口后(只是看不见,并没销毁),使用该方法来显示该窗口 |
frame() | 返回一个系统特定的窗口识别码 |
group(window) | 将顶级窗口加入 window 窗口群组中,如果忽略该参数,将返回当前窗口群的主窗口 |
iconify() | 将窗口图标化(最小化),需要重新显示窗口,使用 deiconify() 方法 |
protocol(name, function) |
将回调函数 function 与相应的规则 name 绑定; 1) name 参数可以是 "WM_DELETE_WINDOW":窗口被关闭的时候; 2) name 参数可以是 "WM_SAVE_YOURSELF":窗口被保存的时候; 3) name 参数可以是 "WM_TAKE_FOCUS":窗口获得焦点的时候。 |
state() | 设置和获得当前窗口的状态,参数值 "normal"(正常状态),"withdrawn(移除窗口)","icon"(最小化)和 "zoomed"(放大) |
transient(master) | 指定为 master 的临时窗口 |
withdraw() | 将窗口从屏幕上移除,只是移动到了窗口之外,并没销毁,需要重新显示窗口,使用 deiconify() 方法 |
import tkinter as tk root = tk.Tk() root.config(bg='#87CEEB') root.title("C语言中文网") root.geometry('400x350+300+300') root.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico') def create_toplevel(): top = tk.Toplevel() top.title("C语言中文网") top.geometry('300x200+100+100') top.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico') # 多行文本显示Message控件 msg = tk.Label(top, text="网址:task.lmcjl.com",bg='#9BCD9B',font=('宋体',15)) msg.pack() tk.Button(root, text="点击创建Toplevel组件", width=20,height=3,command=create_toplevel).pack() root.mainloop()程序的运行结果如下:
图4:Toplevel组件创建顶级窗口
本文链接:http://task.lmcjl.com/news/17462.html