Python之tkinter 面板 PanedWindow

PanedWindow 的基本概念

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

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

参数:

  • 第一个参数:父对象,表示这个面板将建立在哪一个窗口内
  • 第二个参数:options,参数如下
参数 含义
bg 或 background 当鼠标光标不在此控件上时,若是有滚动条或方向盒时,滚动条或方向盒的背景色彩
bd 3D显示时的宽度
默认是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()

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章