Skip to content

PanedWindow组件

PanedWindow组件(Tk 8.4 新增)是一个空间管理组件。跟 Frame 组件类似,都是为组件提供一个框架,不过 PanedWindow 允许让用户调整应用程序的空间划分。

创建一个两窗格的 PanedWindow 组件非常简单:

python
import tkinter as tk

root = tk.Tk()
root.geometry('500x300')

paned = tk.PanedWindow(orient=tk.VERTICAL)
paned.pack(fill=tk.BOTH, expand=True)

# 上方面板
sub_paned1 = tk.Label(paned, text="上方面板")
paned.add(sub_paned1)

sub_paned2 = tk.Label(paned, text="下方面板")
paned.add(sub_paned2)

root.mainloop()

image-20210221154024106

创建一个三窗格的 PanedWindow 组件则需要一点小技巧:

python
import tkinter as tk

root = tk.Tk()
root.geometry('500x300')

# 主面板 默认左右布局
main_paned = tk.PanedWindow()
main_paned.pack(fill=tk.BOTH, expand=True)

#  左边面板
left_paned = tk.Label(main_paned, text="左边面板")
main_paned.add(left_paned)

#  右边面板
right_paned = tk.PanedWindow(orient=tk.VERTICAL)
main_paned.add(right_paned)
#  右上面板
right_top_paned = tk.Label(right_paned, text="右上面板")
right_paned.add(right_top_paned)
#  右下面板
right_bottom_paned = tk.Label(right_paned, text="右下面板")
right_paned.add(right_bottom_paned)
root.mainloop()

image-20210221154747827

这里不同窗格事实上是有一条“分割线”(sash)隔开,虽然你看不到,但你却可以感受到它的存在。不妨把鼠标缓慢移动到大概的位置,当鼠标指针改变的时候后拖动鼠标……也可以把“分割线”显式地显示出来,并且可以为它附上一个“手柄”(handle):

python
import tkinter as tk

root = tk.Tk()
root.geometry('500x300')

# 主面板 默认左右布局
main_paned = tk.PanedWindow(showhandle=True)  # showhandle 显示分割拖动选项
main_paned.pack(fill=tk.BOTH, expand=True)

#  左边面板
left_paned = tk.Label(main_paned, text="左边面板")
main_paned.add(left_paned)

#  右边面板
right_paned = tk.PanedWindow(orient=tk.VERTICAL, showhandle=True, sashrelief=tk.SUNKEN)  # sashrelief 设置分割线的样式
main_paned.add(right_paned)
#  右上面板
right_top_paned = tk.Label(right_paned, text="右上面板")
right_paned.add(right_top_paned)
#  右下面板
right_bottom_paned = tk.Label(right_paned, text="右下面板")
right_paned.add(right_bottom_paned)
root.mainloop()

image-20210221155140487