Python tkinter -- 第 17 章 PanedWindow メソッド

17.2 メソッド

方法 説明
add(子, **オプション) サブコンポーネントを追加します。
child: 子コンポーネント識別
オプション: 子コンポーネントを追加するメソッド。下の表を参照してください
構成() 物件説明に参加します。
忘れてください(子供)
削除(子) 子ウィンドウを削除します。
子供 子ウィンドウのID
識別(x, y) 座標 (x, y) を指定すると、その座標の要素の名前を返します。
座標が子コンポーネント上にある場合は、空の文字列を返します
。 座標が分割線上にある場合は、2 タプル (n, 'sash) を返します。 '), n が 0 の場合、最初の分割線を意味します。
座標がハンドル上にある場合は、2 タプル (n, 'ハンドル') を返します。n は 0、つまり最初のハンドルを意味します
panecget(子, オプション) サブウィンドウの値を取得します(オプション)
paneconfig(子, **オプション)
paneconfigure(子, **オプション)
子ウィンドウのプロパティを設定します。特定の属性を定義するには、add(child, **options) 関数に参加します。
ペイン() サブウィンドウのリストを返す
プロキシ_座標() エージェントの座標を取得する
proxy_forget() プロキシの削除
プロキシ_プレイス(x, y) エージェントを座標 (x,y) に配置します
サッシ座標(インデックス) Indexで指定された分割線の位置座標を取得します
サッシマーク(インデックス, x, y) マウスの位置を(x,y)に登録します。
サッシ_プレイス(インデックス, x, y) 分割線を座標(x,y)で指定した位置に移動します。

サブコンポーネントの追加メソッド

方法 説明する
指定されたサブコンポーネントの後に新しいサブコンポーネントを追加します
指定されたサブコンポーネントの前に新しいサブコンポーネントを追加します
身長 子コンポーネントの高さを指定します
最小サイズ このオプションは、ペインがこれより低くてはならない値を制御します。orient
=HORIZONTAL の場合、ペインの幅はこのオプションの値より小さくてはなりません。orient
=VERTICAL の場合、ペインの高さは以下の値より低くてはなりませんこのオプションの値。
パドクス 子コンポーネントの水平方向の間隔を指定します。
パディ 子コンポーネントの垂直方向の間隔を指定します
粘着性のある ペインのサイズがサブコンポーネントのサイズより大きい場合、このオプションはペイン内のサブコンポーネントの位置を指定します。オプションの値は次のとおりです
: E、S、W、N (南、東、北西) およびそれらの組み合わせ価値観
子コンポーネントの幅を指定します
17.2.1 add(子, kw)
サブコンポーネントを追加します。ペインでパーティションのスタイルとサイズを定義した後、add() メソッドを使用して各サブペインに特定のコンポーネントを追加します。サブコンポーネントを追加するためのパラメータは次のとおりです。
(1)その後
after で指定した子コントロールの後に追加します。例えば:
right=tk.Label(pane,text='right')
left=tk.Label(pane,text='left')
pane.add(右,後=左)
このステートメントは、右のサブコントロールが左のサブコントロールの後に追加されることを意味します。ペインが水平に配置されている場合、右のコントロールは左のコントロールの右側にあります。
(2)前
before で指定した子コントロールの前に追加します。例えば:
right=tk.Label(pane,text='right')
left=tk.Label(pane,text='left')
pane.add(右,前=左)
これも水平方向に分散されたペインであり、このとき、右のコントロールは左のコントロールの左側にあります。右のコントロールが左のコントロールの前にペインに挿入されるように指定されているためです。
(3)身長
子コントロールの高さを設定します。次に、テキストなどのサブコントロール自体に高さがあるものがありますが、どれが優先されるのでしょうか? 答えは、コントロールの高さがそれよりも高いということです。つまり、Text サブコントロールの高さが height で指定された高さより大きい場合、Text が使用されます。高さの値が大きい場合(単位が一致しない場合は、同じ単位の高さの値に変換して比較します)、高さで定義された値を使用します。
(4)最小サイズ
最小のペインの数値を指定します。ペインの構成はこの値以上になります。
import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  width=240,sashwidth=20)
left=tk.Text(b1,height=5,width=5,bg='red')
b1.add(left,minsize=140)
right=tk.Text(b1,height=5,width=5)
b1.add(right)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
图一是没有使用minsize参数的情况,图二是使用了minsize的情况,可以看见是有不同的。right子控件使用了minsize之后,由于要保证最小的宽度是150个像素,明显比没有使用的时候要宽了。对于水平分布的窗格,minsize是指的宽度,而对于垂直分隔的窗格,minsize指的是高度。使用的时候要注意区分窗格的分布。
(5)padx
设置水平方向上的子控件的内边距值。

import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,width=240,
                  sashwidth=20,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Text(b1,height=5,width=5,bg='red')
b1.add(right,padx=10)
b1.pack()
root.mainloop()

结果:
在这里插入图片描述
说明:padx=10,可以发现在右侧的子控件的两边有蓝色的边,而左侧的子控件没有使用padx,就没有明显的蓝色的边。
(6)pady
垂直方向的内边距值。用法参见padx。
(7)sticky
sticky的用法与grid布局管理器的用法是一致的。如果子控件比窗格要小的话,就可以使用sticky来放置子控件到相应的方位上。具体的用法参见第三章的grid布局管理器。
(8)width
定义子控件的宽度。与height用法类似。
17.2.2 config()
动态改变窗格的属性。属性见17.1节的定义。
17.2.3 forget(child) 和remove(child)
移除一个窗格。

import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  width=240,sashwidth=20,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Text(b1,height=5,width=5,bg='red')
b1.add(right,padx=10)
b1.pack()
def remove():
    b1.remove(right)
b2=tk.Button(root,text='移除窗格',command=remove)
b2.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
17.2.4 identify(x, y)
返回给定坐标点的处于什么窗格的部件上:
(1)空字符串
表示位于子控件上
(2)(n,‘sash’)
表示位于分隔条上。n表示第几个分隔条,从0开始计数。
(3)(n,’handle’)
表示位于手柄上。n表示第几个手柄,从0开始计数

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  sashwidth=90,width=240,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Text(b1,height=5,width=5,bg='red')
b1.add(right,padx=10)
b1.pack()
b3=tk.Label(root)
b4=tk.Entry(root,width=5)
b5=tk.Entry(root,width=5)

def identify():
    r=b1.identify(b4.get(),b5.get())
    if r == '':
        b3['text']='子控件'
    else:
        b3['text']=str(r)
    
b2=tk.Button(root,text='identify',command=identify)
b2.pack()
b4.pack(side='left')
b5.pack(side='right')
b3.pack()
def b(event):
    print(event)

root.bind('<Button-1>',b)
root.mainloop()

结果:
在这里插入图片描述
说明:先点中分隔条,根据在命令行窗口得到的鼠标位置,把x坐标值输入左边的输入框,y坐标值输入右边的输入框,点击按钮后,就可以得到相应的结果了。手柄和子控件同样的方法。
17.2.5 panecget(child, option)
获取子窗格的属性,属性的定义在17.2.1中已经详细介绍了。

import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  sashwidth=1,width=240,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Text(b1,height=5,width=5,bg='red')
b1.add(right,padx=10,before=left)
b1.pack()
b3=tk.Label(root)
b4=tk.Entry(root)

def cget():
    b3['text']=b1.panecget(right,b4.get())
    
b2=tk.Button(root,text='cget',command=cget)
b2.pack()
b4.pack()
b3.pack()
root.mainloop()

结果:
在这里插入图片描述
17.2.6 paneconfigure(child, **options)和paneconfig(child, **options)

import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,sashwidth=1,
                  width=240,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Text(b1,height=5,width=5,bg='red')
b1.add(right,padx=10,before=left)
b1.pack()
b3=tk.Label(root)
b4=tk.Entry(root,width=10)
b5=tk.Entry(root,width=10)
def config():
    key={}
    key[b4.get()]=b5.get()
    b3['text']=b1.paneconfig(right,key)
    
b2=tk.Button(root,text='PaneConfig',command=config)
b2.pack()
b4.pack(side='left')
b5.pack(side='left')
b3.pack()
root.mainloop()

结果:
在这里插入图片描述
在这里插入图片描述
动态调整子窗格的属性。

17.2.7 panes()
返回子窗口列表。

import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  sashwidth=1,width=240,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Text(b1,height=5,width=5,bg='red')
b1.add(right,padx=10,before=left)
b1.pack()
b3=tk.Label(root)
def panes():
    b3['text']=b1.panes()
    
b2=tk.Button(root,text='Panes',command=panes)
b2.pack()
b3.pack()
root.mainloop()

结果:
在这里插入图片描述
17.2.8 sash_coord(index)
获得分隔线的坐标。index的值是0,因为一个窗格实例,只有一个分隔线。

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  sashwidth=1,width=240,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Label(b1,text='实验室')
b1.add(right)
b1.pack()
b3=tk.Label(root,text=str(b1.sash_coord(0)))
b3.pack()
root.mainloop()

结果:
在这里插入图片描述
17.2.9 sash_mark(index)
返回鼠标上次拖拽分隔线的坐标。

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  sashwidth=1,width=240,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Label(b1,text='实验室')
b1.add(right)
b1.pack()
def mark():
    right['text']=str(b1.sash_mark(0))
b3=tk.Button(root,text='mark',command=mark)
b3.pack()
root.mainloop()

结果:
在这里插入图片描述
17.2.10 sash_place(index,x,y)
移动分隔到指定的位置(x,y)处。

import tkinter as tk
from tkinter import ttk

root=tk.Tk()
root.geometry('320x240')
b1=tk.PanedWindow(showhandle=True,
                  sashrelief=tk.SUNKEN,
                  sashwidth=1,width=240,bg='blue')
left=tk.Text(b1,height=5,width=5)
b1.add(left,minsize=40)
right=tk.Label(b1,text='实验室')
b1.add(right)
b1.pack()
b4=tk.Entry(root)
def place():
    (x,y)=b4.get().split(',')
    b1.sash_place(0,x,y)
b3=tk.Button(root,text='Place',command=place)
b3.pack()
b4.pack()
root.mainloop()

结果:
在这里插入图片描述

おすすめ

転載: blog.csdn.net/weixin_42272768/article/details/100809452