1.PanedWindow
PanedWindow基本概念
PanedWindow可以翻譯為面板,是一個Widget容器控件,可以在此容器內(nèi)建立任意數(shù)量
的子控件。不過一般是在此控件內(nèi)建立三個子控件,而控件是以水平方式或垂直方式排列。
它的構造方法語法如下:
PanedWindow(父對象,options,···)
PanedWindow()方法的第一個參數(shù)是父對象,表示它將建立在哪一個父對象內(nèi)。下列是
PanedWindow()方法內(nèi)其他常用的options參數(shù)。
(1)bg或background:當鼠標不在此控件上時,若是有滾動條或方向盒時,滾動條或方向
盒的背景色彩。
(2)bd:3D顯示時的寬度,默認是2。
(3)borderwidth:邊界線寬度,默認是2。
(4)cursor:當鼠標光標在標簽上方時的形狀。
(5)handlepad:面板顯示寬度,默認是8。
(6)handlesize:面板顯示大小,默認是8。
(7)height:沒有默認高度。
(8)orient:面板配置方向默認是HORIZONTAL。
(9)relief:默認是relief=FLAT,由此空值文字外框。
(10)sashcursor:分隔線光標,沒有默認值。
(11)sashrelief:面板分隔外框,默認是RAISED。
(12)showhandle:滑塊屬性,可設定是否顯示,沒有默認值。
(13)width:面板整體寬度,沒有默認值。
插入子控件add()
add(child,options)可以插入子對象。
樣例:在PanedWindow對象內(nèi)插入兩個標簽子對象。
from tkinter import *
pw=PanedWindow(orient=VERTICAL)
pw.pack(fill=BOTH,expand=True)
top=Label(pw,text="Top Pane")
pw.add(top)
bottom=Label(pw,text="Bottom Pane")
pw.add(bottom)
pw.mainloop()

建立LabelFrame當作子對象
PanedWindow是一個面板,最常用的應用是將它分成二三份,然后可以將所設計的控件適度
分配位置。
樣例:設計三個LabelFrame對象當作PanedWindow的子對象,然后水平排列。
from tkinter import *
root=Tk()
root.title("ch14_2")
pw=PanedWindow(orient=HORIZONTAL)
leftframe=LabelFrame(pw,text="Left Pane",width=120,height=150)
pw.add(leftframe)
middleframe=LabelFrame(pw,text="Middle Pane",width=120)
pw.add(middleframe)
rightframe=LabelFrame(pw,text="Right Pane",width=120)
pw.add(rightframe)
pw.pack(fill=BOTH,expand=True,padx=10,pady=10)
pw.mainloop()

tkinter.ttk模塊的weight參數(shù)
在tkinter.ttk模塊中,若執(zhí)行add(子對象,options),在options字段可以增加weight參數(shù),
weight代表更改窗口寬度時每個Pane更改的比例,如果插入三個子對象LabelFrame時
weight都是1,代表放大或縮小窗口時,三個子對象是相同比例的。
需留意在add()方法內(nèi)使用weight參數(shù)時需要導入thikter.ttk。
在插入三個LabelFrame對象時增加weight=1。在執(zhí)行時若是方法或縮小窗口,可以看到三個
LabelFrame子對象是按相同比例更改的。
from tkinter import *
from tkinter.ttk import *
root=Tk()
root.title("ch14_3")
pw=PanedWindow(orient=HORIZONTAL)
leftframe=LabelFrame(pw,text="Left Pane",width=120,height=150)
pw.add(leftframe,weight=1)
middleframe=LabelFrame(pw,text="Middle Pane",width=120)
pw.add(middleframe,weight=1)
rightframe=LabelFrame(pw,text="Right Pane",width=120)
pw.add(rightframe,weight=1)
pw.pack(fill=BOTH,expand=True,padx=10,pady=10)
pw.mainloop()
如果三個LabelFrame子對象設置不同的weight,以后更改大小時,彼此會因weight有不同的
影響。
樣例2:設置更改窗口大小時Left Pane的weight=2、Middle Pane的weight=2、Right Pane
的weight=1,這代表更改寬度時,更改比例分別是2:2:1。
from tkinter import *
from tkinter.ttk import *
root=Tk()
root.title("ch14_3")
pw=PanedWindow(orient=HORIZONTAL)
leftframe=LabelFrame(pw,text="Left Pane",width=120,height=150)
pw.add(leftframe,weight=2)
middleframe=LabelFrame(pw,text="Middle Pane",width=120)
pw.add(middleframe,weight=2)
rightframe=LabelFrame(pw,text="Right Pane",width=120)
pw.add(rightframe,weight=1)
pw.pack(fill=BOTH,expand=True,padx=10,pady=10)
pw.mainloop()

在PanedWindow內(nèi)插入不同控件
樣例:這個程序會先建立PanedWindow,對象名稱是pw。然后在它下面的左邊建立
Entry對象,對象名稱是entry,下面右邊建立另一個PanedWindow對象,對象名稱是
pwin。最后在pwin對象下面建立Scale對象。
from tkinter import *
pw=PanedWindow(orient=HORIZONTAL)
pw.pack(fill=BOTH,expand=True)
entry=Entry(pw,bd=3)
pw.add(entry)
pwin=PanedWindow(pw,orient=VERTICAL)
pw.add(pwin)
scale=Scale(pwin,orient=HORIZONTAL)
pwin.add(scale)
pw.mainloop()

注意,實測發(fā)現(xiàn)一個問題:
如果先創(chuàng)建notebook,后創(chuàng)建PanedWindow,PanedWindow放上notebook后,會看不到notebook