第17章PanedWindow
PanedWindow(窗格)支持创建1个或者多个子窗口的窗口布局管理控件。可以使用鼠标拖动分割线来改变子窗口的大小。PanedWindow是Tk8.4后加入的新控件,与Frame控件类似都是提供一个框架给组件。不过窗格控件可以动态的调整子窗口的大小。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
sashrelief=tk.SUNKEN)
left=tk.Label(b1,text='左边窗口')
b1.add(left)
right=tk.Label(b1,text='右边窗口')
b1.add(right)
b1.pack(fill=tk.BOTH,expand=1)
root.mainloop()
属性 | 含义 |
---|---|
background bg |
设置背景颜色 |
borderwidth bd |
设置边框宽度 |
cursor | 指定当鼠标在PanedWindow上飘过的时候的鼠标样式 |
handlepad | 调节“手柄”的位置 例如orient=VERTICAL,则handlepad选项表示“分割线”上的手柄与左端的距离,如果是orient=HORIZONTAL,那么距离就是手柄与上端的距离。默认值是8像素 |
handlesize | 设置“手柄”的尺寸(由于“手柄”必须是一个正方形,所以是设置正方形的边长) 默认值是8像素 |
height | 设置PanedWindow的高度 如果忽略该选项,则高度由子组件的尺寸决定 |
opaqueresize | 该选项定义了用户调整窗格尺寸的操作 如果该选项的值为True(默认),窗格的尺寸随用户鼠标的拖拽而改变 如果该选项的值为False,窗格的尺寸在用户释放鼠标的时候才更新到新的位置 |
orient | 指定窗格的分布方式 可以是HORIZONTAL(横向分布)和VERTICAL(纵向分布) |
relief | 指定边框样式 默认值是FLAT 另外你还可以设置SUNKEN,RAISED,GROOVED或RIDGE |
sashcursor | 设置调整分割线时的光标样式 |
sashpad | 设置分割线到窗格间的间距 |
sashrelief | 设置分割线的样式 默认值是FLAT 另外你还可以设置SUNKEN,RAISED,GROOVED或RIDGE |
sashwidth | 设置分割线的宽度 |
showhandle | 设置是否显示调节窗格的手柄 默认值为False |
width | 设置PanedWindow的宽度 如果忽略该选项,则高度由子组件的尺寸决定 |
17.1.1 background(bg) | |
设置背景颜色。 |
17.1.2 borderwidth(bd)
设置窗格控件的外框宽度。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
sashrelief=tk.SUNKEN,bg='blue',
width=240,border=30)
left=tk.Entry(b1,width=5)
b1.add(left)
right=tk.Entry(b1,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.3 cursor
鼠标经过窗格控件时的形状。具体的cursor介绍请见3.3.6节。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
sashrelief=tk.SUNKEN,
width=240,cursor='spider')
left=tk.Entry(b1,width=5)
b1.add(left)
right=tk.Entry(b1,width=5)
b1.add(right)
b1.pack()
root.mainloop()
17.1.4 handlepad
调节“手柄”的位置
例如orient=VERTICAL,则handlepad选项表示“分割线”上的手柄与左端的距离,如果是orient=HORIZONTAL,那么距离就是手柄与上端的距离。默认的距离是8像素。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
sashrelief=tk.SUNKEN,
width=240,handlepad=30)
left=tk.Text(b1,height=5,width=5)
b1.add(left)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.5 handlesize
定义手柄的大小。默认大小是8像素。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
sashrelief=tk.SUNKEN,
width=240,handlepad=30,
handlesize=20)
left=tk.Text(b1,height=5,width=5)
b1.add(left)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.6 height
定义窗格的高度。如果没有定义该选项,窗格的高度由高度最大的子组件决定。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
sashrelief=tk.SUNKEN,
width=240,height=200)
left=tk.Text(b1,height=5,width=5)
b1.add(left)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.7 opaqueresize
设置拖动效果。如果opaqueresize=True,则支持拖动效果,就是窗格中的子组件的大小随着分隔条的变动而改变。如果opaqueresize=False,那么只有当鼠标键释放的时候才改变子组件的大小,也就是没有拖动效果。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,sashrelief=tk.SUNKEN,
width=240,opaqueresize=False)
left=tk.Text(b1,height=5,width=5)
b1.add(left)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.8 orient
定义窗格的分布方向。有HORIZONTAL(横向分布)和VERTICAL(纵向分布)两种。
17.1.9 relief
指定边框样式。参见3.3.5节的说明。
17.1.10 sashcursor
调整分隔条时的光标样式。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
sashrelief=tk.SUNKEN,
width=240,sashcursor='spider')
left=tk.Text(b1,height=5,width=5)
b1.add(left)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.11 sashpad
设置分隔线两边的空白大小,就是到子组件的距离。默认是0。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,sashrelief=tk.SUNKEN,
width=240,sashpad=20)
left=tk.Text(b1,height=5,width=5)
b1.add(left)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.12 sashrelief
设置分隔线的3D样式。有:FLAT,SUNKEN,RAISED,GROOVED或RIDGE。如果是FLAT,不会有分隔线显示,因为和背景是一样的。
17.1.13 sashwidth
设置分隔线的宽度。
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,sashrelief=tk.SUNKEN,
width=240,sashwidth=20)
left=tk.Text(b1,height=5,width=5)
b1.add(left)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()
结果:
17.1.14 showhandle
是否显示调节手柄。Showhandle=True则显示,否则不显示。
17.1.15 width
定义窗口框控件的宽度。如果没有此参数,则根据子组件的宽度来决定窗格控件的宽度。