Tcl/Tk
Curso On-Line de Programação

Gerenciando a disposição dos widgets na janela

O modo como os widgets são arrumados na janela é chamado geometria. Atualmente, Tk possui três gerenciadores de geometria: pack, place e grid. Cada um correspondendo a um comando de mesmo nome.
 

O comando pack

O comando pack arruma os widgets na janela, segundo coordenadas relativas, do tipo "coloque os widgets de cima para baixo, esticando-os para preencher todo o espaço horizontal".

Veja um exemplo:

toplevel .t
button .t.b1 -text "Botão 1"
button .t.b2 -text "Botão 2"
button .t.b3 -text "Botão 3"
pack .t.b1 .t.b2 .t.b3
Cria uma janela com três botões arrumados de cima para baixo.

O comando pack não apenas dispõe os widgets na janela inicialmente, como mantém os widgets na mesma disposição, independente de o usuário redimensionar a janela, ou não.

De um modo geral, quando não estiver utilizando um ambiente de desenvolvimento visual, como o Visual Tcl, deverá preferir utilizar o comando pack ou o comando grid. Quando estiver desenhando suas telas com o Visual Tcl, deverá, a maioria das vezes, optar pelo gerenciador place.

A seguir são apresentados todos os comando do gerenciador de geometria pack:
 

Comando Descrição
pack Determina como os widgets devem ser dispostos na janela mestre.
pack forget Faz com que um widget deixe de ser gerenciado pelo pack.
pack info Retorna a configuração do pack para o widget dado.
pack propagate Configura a propagação para a janela mestre.
pack slave Retorna uma lista com os escravos dentro da janela mestre.

O comando pack suporta diversas opções. As principais são:
 

Opção Descrição.
-anchor Ponto de referência para o pack dispor o widget: n, ne, e, se, s, sw, w, nw e center.
-expand Se 1, o pack expandirá o widget para ocupar todo o espaço disponível. Se 0 o widget não será expandido.
-in Nome da janela onde o pack deve colocar o widget. É opcional, pois o nome do widget já indica o caminho.
-padx Espaço horizontal extra.
-pady Espaço vertical extra.
-fill Como o widget deve ser expandido: none, x, y, both.
-side Lado a partir do qual o pack deve colocar o widget: top, botton, left, right.

Exemplos:

toplevel .t
button .t.b1 -text "Botão 1"
button .t.b2 -text "Botão 2"
button .t.b3 -text "Botão 3"
button .t.b4 -text "Botão 4"
pack .t.b1 -side top -fill x
pack .t.b2 -side left -fill y
pack .t.b3 -side left -fill both -expand 1
pack .t.b4 -side left -fill y
wm geometry .t 200x150
Cria uma janela com quatro botões dispostos como na figura abaixo:

O comando grid

O comando grid dispõe os widgets em uma grade na janela, onde cada widget ocupa uma ou mais células da grade.

Veja o exemplo:

toplevel .t
button .t.b1 -text "Botão 1"
button .t.b2 -text "Botão 2"
button .t.b3 -text "Botão 3"
button .t.b4 -text "Botão 4"
grid .t.b1 -row 0 -column 0
grid .t.b2 -row 0 -column 1
grid .t.b3 -row 1 -column 0
grid .t.b4 -row 1 -column 1
Cria uma janela com quatro botões dispostos em uma grade.

O comando grid é muito útil para criar tabelas e painéis de botões como em calculadoras.

A seguir são apresentados todos os sub-comando do comando grid:
 

Comando Descrição
grid [configure] Determina como os widgets devem ser dispostos na grade da janela mestre.
grid bbox Retorna as coordenadas do retângulo ocupado pelos widgets nas linhas e colunas determinadas. O formato é linha1coluna1linha2coluna2.
grid columnconfigure Retorna ou configura as colunas indicadas na grade mestre. As opções são: -minsize, -pad e -weight.
grid forget Remove o(s) widget(s) da grade.
grid info Retorna as configurações do grid para o widget especificado.
grid location Retorna a coluna e a linha contendo as coordenadas de tela especificadas.
grid propagate Determina se o widget tentará redimensionar seus ancestrais para caber neles.
grid remove Remove o(s) widget(s) da grade, mas continua lembrando as suas configurações.
grid rowconfigure Retorna ou configura as linhas indicadas na grade mestre. As opções são: -minsize, -pad e -weight.
grid size Retorna o tamanho da grade no formato colunalinha.
grid slaves Sem opções, retorna uma lista dos escravos dispostos no mestre. Caso contrário retorna uma lista com os widgets na linha e/ou coluna especificados.

O comando grid suporta diversas opções. As principais são:
 

Opção Descrição.
-column Coluna.
-columnspan Número de colunas que o widget ocupará.
-in Nome da janela onde o grid deve colocar o widget. É opcional, pois o nome do widget já indica o caminho.
-padx Espaço horizontal extra.
-pady Espaço vertical extra.
-row Linha.
-rowspan Número de linhas que o widget ocupará..
-sticky Determina a direção para o widget se ancorar: n, s, e, w.

Exemplos

toplevel .t
button .t.b1 -text "Botão 1" -width 24
button .t.b2 -text "Botão 2"
button .t.b3 -text "Botão 3"
button .t.b4 -text "Botão 4"
button .t.b5 -text "Botão 5" -width 24
grid .t.b1 -row 0 -column 0 -columnspan 3
grid .t.b2 -row 1 -column 0
grid .t.b3 -row 1 -column 1
grid .t.b4 -row 1 -column 2
grid .t.b5 -row 2 -column 0 -columnspan 3
Cria uma janela com quatro botões dispostos em uma grade, como na figura abaixo:

O comando place

O comando place é muito difícil de usar, pois trabalha com coordenadas absolutas. De um modo geral, só é usado pelos ambientes de desenvolvimento visual, como o Visual Tcl, onde o programador clica e arrasta para desenhar os widgets em uma janela. Isso é feito de modo transparente para o programador, de modo que ele não precisa se preocupar com a sintaxe do comando que está sendo utilizado para desenhar a janela de seu programa.

Não abordaremos o comando place aqui, pois você provavelmente nunca o utiliza-rá diretamente.

Para uma descrição detalhada de todos os comandos disponíveis em Tk, consulte a documentação on-line, ou o Tcl/Tk Reference Guide, ou ainda o Tcl/Tk Electronic Reference.

Para maiores informações envie e-mail para info@souzamonteiro.com.


http://www.souzamonteiro.com
info@souzamonteiro.com

Copyright(C) 2000 by Roberto Luiz Souza Monteiro