17.2 Métodos
método | descrever |
---|---|
add(filho, **opções) | Adicione subcomponentes. child: opções de identificação do componente filho: método para adicionar componentes filho. Veja a tabela abaixo |
config() | Atende a descrição do imóvel. |
esquecer (criança) | |
remover(criança) | Excluir uma janela filha. |
Criança | ID da janela filha |
identificar(x, y) | Dada uma coordenada (x, y), retorna o nome do elemento naquela coordenada Se a coordenada estiver em um componente filho, retorna uma string vazia Se a coordenada estiver em uma linha dividida, retorna uma tupla de 2 (n, 'sash '), Se n for 0, significa a primeira linha divisória. Se a coordenada estiver no identificador, retorne uma tupla 2 (n, 'identificador') e n é 0, o que significa o primeiro identificador |
panecget(filho, opção) | Obter o valor da subjanela opcional |
paneconfig(filho, **opções) painelconfigure(filho, **opções) |
Defina as propriedades da janela filho. Para a definição de atributos específicos, participe da função add(child, **options) |
painéis () | lista de subjanelas de retorno |
proxy_coord() | Obter as coordenadas do agente |
proxy_forget() | excluir agente |
proxy_place(x, y) | coloque um agente nas coordenadas (x,y) |
faixa_coord(índice) | Obtenha as coordenadas de posição da linha divisória especificada pelo índice |
sash_mark(índice, x, y) | Registre a posição do mouse em (x,y). |
sash_place(índice, x, y) | Mova a linha divisória para a posição especificada pelas coordenadas (x,y). |
Adicionar método de subcomponente
método | ilustrar |
---|---|
depois | Adiciona um novo subcomponente após o subcomponente especificado |
antes | Adiciona um novo subcomponente antes do subcomponente especificado |
altura | Especifica a altura do componente filho |
tamanho mínimo | Esta opção controla o valor que o painel não deve ser inferior. Se orient=HORIZONTAL, a largura do painel não deve ser inferior ao valor desta opção. Se orient=VERTICAL, a altura do painel não deve ser inferior a o valor desta opção. |
Padx | Especifica o espaçamento horizontal dos componentes filho |
Arroz | Especifica o espaçamento vertical dos componentes filho |
pegajoso | Quando o tamanho do painel é maior que o do subcomponente, esta opção especifica a posição do subcomponente no painel. Os valores opcionais são: E, S, W, N (sul, leste, oeste, norte) e seus valores combinados |
largura | Especifica a largura do componente filho |
17.2.1 add(criança, kw) | |
Adicione subcomponentes. Depois que o painel definir o estilo e o tamanho da partição, use o método add() para adicionar os componentes específicos em cada subpainel. Os parâmetros para adicionar subcomponentes são: | |
(1)Depois | |
Adicione após o controle filho especificado por after. por exemplo: | |
direita=tk.Label(pane,text='direita') | |
left=tk.Label(pane,text='left') | |
pane.add(direita,depois=esquerda) | |
Essa instrução significa que o subcontrole direito é adicionado após o subcontrole esquerdo. Se os painéis estiverem organizados horizontalmente, o controle direito estará à direita do controle esquerdo. | |
(2) antes | |
Adicione antes do controle filho especificado por antes. por exemplo: | |
direita=tk.Label(pane,text='direita') | |
left=tk.Label(pane,text='left') | |
pane.add(direita,antes=esquerda) | |
Também é um painel distribuído horizontalmente. Neste momento, o controle direito está no lado esquerdo do controle esquerdo. Porque é especificado que o controle direito é inserido no painel antes do controle esquerdo. | |
(3) altura | |
Define a altura do controle filho. Então, alguns subcontroles têm uma altura, como Texto, etc., qual deve prevalecer? A resposta é que a altura do controle é maior que isso. Em outras palavras, se a altura do subcontrole Text for maior que a altura especificada por height, Text será usado. Se o valor da altura for grande (se as unidades forem inconsistentes, será convertido para o valor da altura da mesma unidade para comparação), use o valor definido por altura. | |
(4) tamanho mínimo | |
Especifica o valor numérico para o menor painel. A configuração do painel não será menor que esse valor. |
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()
结果: