美文网首页
十四、容器PaneWindow

十四、容器PaneWindow

作者: 蝉时雨丶 | 来源:发表于2020-07-27 10:42 被阅读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

    相关文章

      网友评论

          本文标题:十四、容器PaneWindow

          本文链接:https://www.haomeiwen.com/subject/aoaalktx.html