PanedWindow 的基本概念

  PanedWindow可以翻译为面板,是一个Widget 控件,可以在此容器内建立任意数量的子控件,不过一般在此控件内建立两三个子控件,而控件是以水平方向或垂直方向排列。它的构造方法语法如下

PanedWindow(父对象, options, ...)

参数:

  • 第一个参数:父对象,表示这个面板将建立在哪一个窗口内
  • 第二个参数:options,参数如下
参数含义
bg 或 background当鼠标光标不在此控件上时,若是有滚动条或方向盒时,滚动条或方向盒的背景色彩
bd3D显示时的宽度
默认是2
borderwidth边界线宽度
默认是2
cursor当鼠标光标在标签上方时的形状
handlepad面板显示宽度
默认是8
handlesize面板显示大小
默认是8
height高度
没有默认高度
opaqueresize该选项定义了用户调整窗格尺寸的操作
如果该选项的值为 True(默认),窗格的尺寸随用户鼠标的拖拽而改变
如果该选项的值为 False,窗格的尺寸在用户释放鼠标的时候才更新到新的位置
orient面板配置方向
默认是HORIZONTAL
relief可由此控制文字外框
默认是relief=FLAT
sashcursor分割线光标,没有默认值
sashpad设置每一条分割线到窗格间的间距
sashrelief面板分隔线外框
默认值是RAISED
sashwidth设置分割线的宽度
showhandle滑块属性,可设定是否显示
默认值为 False
width面板整体宽度,没有默认值
插入子控件 add()
add(child, options)

可以插入子控件

例子

import tkinter

panedWindow = tkinter.PanedWindow(orient=tkinter.VERTICAL)
panedWindow.pack(fill=tkinter.BOTH, expand=True)

# 创建标签Top
top = tkinter.Label(panedWindow, text='Top')
panedWindow.add(top)

# 创建标签Bottom
bottom = tkinter.Label(panedWindow, text='Bottom')
panedWindow.add(bottom)

panedWindow.mainloop()

运行结果:
在这里插入图片描述
放大后

在这里插入图片描述

建立LabelFrame 当做子对象

PanedWindow 是一个面板,最常的应用是将它分成两三份,然后可以将所设计的控件适度分配位置。

例子

import tkinter

root = tkinter.Tk()

panedWindow = tkinter.PanedWindow(orient=tkinter.HORIZONTAL)
panedWindow.pack(fill=tkinter.BOTH, expand=True)

leftFrame = tkinter.LabelFrame(panedWindow, text='Left', width=120, height=150)
panedWindow.add(leftFrame)

centerFrame = tkinter.LabelFrame(panedWindow, text='Center', width=120, height=150)
panedWindow.add(centerFrame)

rightFrame = tkinter.LabelFrame(panedWindow, text='Right', width=120, height=150)
panedWindow.add(rightFrame)

panedWindow.mainloop()

运行结果:
在这里插入图片描述

tkinter.ttk 模块的weight 参数

如果我们单纯的根据上面的程序进行缩放,结果只有最右边一个变大或者变小
图片示例:
在这里插入图片描述
但是如果我们想要同比例缩放或放大呢?

我们可以在add()方法内使用weight参数,但是使用这个需要导入tkinter.ttk

例子

from tkinter import *
from tkinter.ttk import *
root = Tk()

panedWindow = PanedWindow(orient=HORIZONTAL)
panedWindow.pack(fill=BOTH, expand=True)

leftFrame = LabelFrame(panedWindow, text='Left', width=120, height=150)
panedWindow.add(leftFrame, weight=1)

centerFrame = LabelFrame(panedWindow, text='Center', width=120, height=150)
panedWindow.add(centerFrame, weight=1)

rightFrame = LabelFrame(panedWindow, text='Right', width=120, height=150)
panedWindow.add(rightFrame, weight=1)

panedWindow.mainloop()

运行结果:
在这里插入图片描述

如果三个子对象设置不同的 weight,更改窗口大小时,会产生不同的效果

例子

from tkinter import *
from tkinter.ttk import *
root = Tk()

panedWindow = PanedWindow(orient=HORIZONTAL)
panedWindow.pack(fill=BOTH, expand=True)

leftFrame = LabelFrame(panedWindow, text='Left', width=120, height=150)
panedWindow.add(leftFrame, weight=2)

centerFrame = LabelFrame(panedWindow, text='Center', width=120, height=150)
panedWindow.add(centerFrame, weight=2)

rightFrame = LabelFrame(panedWindow, text='Right', width=120, height=150)
panedWindow.add(rightFrame, weight=1)

panedWindow.mainloop()

运行结果:
在这里插入图片描述

在PanedWindow 内插入不同的控件

例子

import tkinter

panedWindow = tkinter.PanedWindow(orient=tkinter.HORIZONTAL)
panedWindow.pack(fill=tkinter.BOTH, expand=True)

entry = tkinter.Entry(panedWindow, bd=3)
panedWindow.add(entry)

# 在panedWindow内创建PanedWindow子对象,名叫panedWindowIn
panedWindowIn = tkinter.PanedWindow(panedWindow, orient=tkinter.VERTICAL)
panedWindow.add(panedWindowIn)

# 在panedWindowIn创建尺度条
scale = tkinter.Scale(panedWindowIn, orient=tkinter.HORIZONTAL)
panedWindowIn.add(scale)

panedWindow.mainloop()

运行结果:
在这里插入图片描述

谢谢观看,笔者会持续更新,如有错误或者建议,请私信我

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐