Python ---(十八)Tkinter窗口组件:PanedWindow

Python 专栏收录该内容
126 篇文章 42 订阅

上一篇:Python —(十七)Tkinter窗口组件:Spinbox


                                          The Tkinter PanedWindow Widget

##简介

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

##何时使用 PanedWindow 组件?

当你需要提供一个可供用户调整的多空间框架的时候,可以使用 PanedWindow 组件。PanedWindow 组件会为每一个子组件生成一个独立地窗格,用户可以自由调整窗格的大小。

##用法

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

from tkinter import *

m = PanedWindow(orient=VERTICAL)
m.pack(fill=BOTH,expand=1)

top = Label(m,text="top pane")
m.add(top)
bottom = Label(m,text="bottom pane")
m.add(bottom)

mainloop()

在这里插入图片描述                        在这里插入图片描述
在这里插入图片描述
   (解析:框架有简单的,例如说分为两个窗格,上和下,或者说左和右,上面在实例化PanedWindow对象时,设置了orient为VERTICAL,因为他默认情况是左右分隔的,这里弄一个垂直的VERTICAL,表示他是垂注的分布,然后在pack的时候,设置BOTH选项让这个框架覆盖全局,接着再来两个Label,用add方法分别显示到上面和下面

   刚开始运行得到截图1,发现和使用Frame没什么区别啊,把他拉大后发现他们分开了,然后当你把鼠标放到 "top pane"下方一丢丢,你就会发现鼠标样式改变了,通过拖拽鼠标左键发现你是可以改变他们的布局的,如第三张截图,所以可以猜到,"top pane"下方一丢丢是有一条分割线的,只是看不到)

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

from tkinter import *

m1 = PanedWindow()
m1.pack(fill=BOTH,expand=1)

left = Label(m1,text="left pane")
m1.add(left)

m2 = PanedWindow(orient=VERTICAL)
m1.add(m2)

top = Label(m2,text="top pane")
m2.add(top)

bottom = Label(m2,text="bottom pane")
m2.add(bottom)

mainloop()

在这里插入图片描述
在这里插入图片描述
   (解析:首先还是先来小窗格,默认的是左右的,left = Label(m1,text=“left pane”)左边的创建好后,右边的再实例化一个PaneWindow,设置orient选项为VERTICAL及垂直的,然后需要注意的就是m1.add(m2),实例化好后是add到m1中去,就是m1的右边,这样的话就是左边是一个Label,右边是一个PaneWindow,然后在基于这个PaneWindow在创建两个Label

   运行后也仍然可以移动他们的位置,也就是说他们有隐藏的线,我们看不到,但是能用鼠标去慢慢得感受他)

我们只要在实例化PanedWindow时设置"showhandle"选项和"ashrelief"选项就可以看到他们了

from tkinter import *


m1 = PanedWindow(showhandle = True,sashrelief=SUNKEN)
m1.pack(fill=BOTH,expand=1)

left = Label(m1,text="left pane")
m1.add(left)

m2 = PanedWindow(orient=VERTICAL,showhandle = True,sashrelief=SUNKEN)
m1.add(m2)

top = Label(m2,text="top pane")
m2.add(top)

bottom = Label(m2,text="bottom pane")
m2.add(bottom)

mainloop()            

在这里插入图片描述
在这里插入图片描述
   (解析:就是在实例化PanedWindow时把showhandle选项设置为True,ashrelief选项就是分割线,把它的样式设置为"sunken"就是向下凹。
   那个小小的正方形,我们就把它称之为handle,只要你把鼠标放在分割线上,就可以调整它的位置,然后你可以通过设置handlesize来设置handle即那个小正方形的位置,他默认是8个像素所以在比较靠边的位置)

##参数

PanedWindow(master=None, **options) (class)

master – 父组件

**options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:

选项含义
background设置背景颜色
bg跟 background 一样
borderwidth设置边框宽度
bd跟 borderwidth 一样
cursor1. 指定当鼠标在 PanedWindow 上飘过的时候的鼠标样式
2. 默认值由系统指定
handlepad1. 调节“手柄”的位置
2. 例如 orient="vertical",则 handlepad 选项表示“分割线”上的手柄与左端的距离
3. 默认值是 8 像素
handlesize1. 设置“手柄”的尺寸(由于“手柄”必须是一个正方形,所以是设置正方形的边长)
2. 默认值是 8 像素
height1. 设置 PanedWindow 的高度
2. 如果忽略该选项,则高度由子组件的尺寸决定
opaqueresize1. 该选项定义了用户调整窗格尺寸的操作
2. 如果该选项的值为 True(默认),窗格的尺寸随用户鼠标的拖拽而改变
3. 如果该选项的值为 False,窗格的尺寸在用户释放鼠标的时候才更新到新的位置
orient1. 指定窗格的分布方式
2. 可以是 "horizontal"(横向分布)和 "vertical"(纵向分布)
relief1. 指定边框样式
2. 默认值是 "flat"
3. 另外你还可以设置 "sunken","raised","groove" 或 "ridge"
sashpad设置每一条分割线到窗格间的间距
sashrelief1. 设置分割线的样式
2. 默认值是:"flat"
3. 另外你还可以设置 "sunken","raised","groove" 或 "ridge"
sashwidth设置分割线的宽度
showhandle1. 设置是否显示调节窗格的手柄
2. 默认值为 False
width1. 设置 PanedWindow 的宽度
2. 如果忽略该选项,则高度由子组件的尺寸决定

##方法

add(child, **options)
– 添加一个新的子组件到窗格中
– 下方表格列举了各个 options 选项具体含义:

选项含义
after添加新的子组件到指定子组件后边
before添加新的子组件到指定子组件前边
height指定子组件的高度
minsize1. 该选项控制窗格不得低于的值
2. 如果 orient="horizontal",表示窗格的宽度不得低于该选项的值
3. 如果 orient="vertical",表示窗格的高度不得低于该选项的值
padx指定子组件的水平间距
pady指定子组件的垂直间距
sticky1. 当窗格的尺寸大于子组件时,该选项指定子组件位于窗格的位置
2. 可选的值有:"e"、"s"、"w"、"n"(分别代表东南西北四个方位)以及它们的组合值
3. 例如 NE 表示子组件显示在右上角的位置
width指定子组件的宽度

forget(child)
– 删除一个子组件

identify(x, y)
– 给定一个坐标(x, y),返回该坐标所在的元素名称
– 如果该坐标位于子组件上,返回空字符串
– 如果该坐标位于分割线上,返回一个二元组(n, ‘sash’),n 为 0 表示第一个分割线
– 如果该坐标位于手柄上,返回一个二元组(n, ‘handle’),n 为 0 表示第一个手柄

panecget(child, option)
– 获得子组件指定选项的值

paneconfig(child, **options)
– 设置子组件的各种选项
– 下方表格列举了各个 options 选项具体含义:

选项含义
after添加新的子组件到指定子组件后边
before添加新的子组件到指定子组件前边
height指定子组件的高度
minsize1. 该选项控制窗格不得低于的值
2. 如果 orient="horizontal",表示窗格的宽度不得低于该选项的值
3. 如果 orient="vertical",表示窗格的高度不得低于该选项的值
padx指定子组件的水平间距
pady指定子组件的垂直间距
sticky1. 当窗格的尺寸大于子组件时,该选项指定子组件位于窗格的位置
2. 可选的值有:"e"、"s"、"w"、"n"(分别代表东南西北四个方位)以及它们的组合值
3. 例如 NE 表示子组件显示在右上角的位置
width指定子组件的宽度

paneconfigure(child, **options)
– 跟 paneconfig() 一样

panes()
– 将子组件以列表的形式返回

remove(child)
– 跟 forget() 一样

sash_coord(index)
– 返回一个二元组表示指定分割线的起点坐标

sash_dragto(index, x, y)
– 实现将指定的分割线拖拽到一个新的位置
– 与 sash_mark() 一起实现

sash_mark(index, x, y)
– 注册当前的鼠标位置

sash_place(index, x, y)
– 将指定分割线移动到一个新的位置


下一篇:Python —(十九)Tkinter窗口组件:Toplevel

  • 0
    点赞
  • 0
    评论
  • 13
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值