![]() |
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.b3Cria 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 200x150Cria 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 1Cria 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 3Cria 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 |
Copyright(C) 2000 by Roberto Luiz Souza Monteiro