十四、容器PaneWindow

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()
image.png

建立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()
image.png

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()
image.png

在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()
image.png

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容