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()
運行結果:
謝謝觀看,筆者會持續更新,如有錯誤或者建議,請私信我