十四、容器PaneWindow

2020-07-27  本文已影响0人  蝉时雨丶

1.PanedWindow

PanedWindow基本概念

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

PanedWindow()方法的第一个参数是父对象,表示它将建立在哪一个父对象内。下列是
PanedWindow()方法内其他常用的options参数。

(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对象内插入两个标签子对象。

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参数

在tkinter.ttk模块中,若执行add(子对象,options),在options字段可以增加weight参数,
weight代表更改窗口宽度时每个Pane更改的比例,如果插入三个子对象LabelFrame时
weight都是1,代表放大或缩小窗口时,三个子对象是相同比例的。

需留意在add()方法内使用weight参数时需要导入thikter.ttk。

在插入三个LabelFrame对象时增加weight=1。在执行时若是方法或缩小窗口,可以看到三个
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内插入不同控件

样例:这个程序会先建立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

注意,实测发现一个问题:
如果先创建notebook,后创建PanedWindow,PanedWindow放上notebook后,会看不到notebook

上一篇下一篇

猜你喜欢

热点阅读