![]() |
Tcl/Tk
Curso On-Line de Programação |
O widget canvas
O widget canvas provê uma área de desenho vetorial para os programas em Tcl/Tk. Os canvas possuem um número enorme de comandos e opções e serão estudados, em detalhes, nesta aula. A utilização do widget canvas para impressão será estudada na aula 21.
Canvas são criados através do comando canvas:
toplevel .t
canvas .t.c
pack .t.c -expand 1 -fill both
.t.c create rectangle 5 5 50 50 -fill blue
.t.c create arc 100 100 200 200 -style pieslice -start 45 -extent 225 -fill redCriará uma janela com um canvas em seu interior e desenhará um retângulo azul e um semi-círculo vermelho dentro do canvas.
Veja como um canvas pode ser poderoso:
Planta baixa
de uma construção
em um canvas
Um editor de setas
construído com um
canvas
Gráficos de pizza
em um canvas
utilizando a biblioteca
tkpiechart 5.3
A seguir serão apresentadas as principais
opções do widget canvas:
| Opção | Descrição |
| -closeenough | Determina o quão próximo deve estar o cursor do mouse para que seja considerado como estando no interior de um ítem. |
| -confine | Determina se será possível visualizar além da área de scroll. Se 1, permite a visualização. Caso contrário, não permite. |
| -scrollregion | Determina a área de scroll. No formato: {X1 Y1 X2 Y2}. |
| -xscrollincrement | Determina o incremento para rolagem horizontal da janela do canvas. |
| -yscrollincrement | Determina o incremento para rolagem vertical da janela do canvas. |
O canvas suporta as seguintes unidades de medida: pixels, polegadas(i), centímetros(c), milímetros(m) e pontos(p). Veja os exemplos:
Valor em pixels: 10
Valor em polegadas: 10i
Valor em centímetros: 10c
Valor em milímetros: 10m
Valor em pontos: 10p
As coordenadas crescem de cima para
baixo de da esquerda para a direita.
Os seguintes índices são suportados: número, end, insert, sel.first, sel.last, @x,y.
A seguir serão apresentadas os comandos
do widget canvas:
| Comando | Descrição |
| addtag | Adiciona uma tag à lista de tags, associada a cada ítem que satisfaca a especificação dada. |
| bbox | Retorna uma lista com quatro elementos, correspondentes às coordenadas do retângulo envolvendo os ítens cujas tags sejam dadas. |
| bind | Associa eventos aos ítens cujas tags sejam dadas. |
| canvasx | Retorna a coordenada X dentro do canvas, que corresponde à coordenada X da tela. |
| canvasy | Retorna a coordenada Y dentro do canvas, que corresponde à coordenada Y da tela. |
| coords | Retorna ou define as coordenadas de um ítem. |
| create | Cria um novo ítem, do tipo especificado. |
| dchars | Apaga os caracteres dentro da faixa especificada, nos ítens cuja tag for especificada. |
| delete | Apaga os ítens cujas tags sejam especificadas. |
| dtag | Remove a tag especificada. |
| find | Retorna os ítens que satisfaçam as especificações dadas. Veja as especificações logo a seguir. |
| focus | Ajusta o foco para o ítem dado. |
| gettags | Retorna a lista de todos os ítens associados à tag dada. |
| icursor | Ajusta a posição do cursor, para inserção, dentro dos ítens cuja tag seja dada. |
| index | Retorna uma string numérica dando a posição do caractere, dentro do ítem, cuja tag seja dada. |
| insert | Insere texto dentro do ítem cuja tag seja dada. |
| itemcget | Retorna o valor da opção indicada, no ítem cuja tag seja dada. |
| itemconfigure | Configura o valor da opção indicada, no ítem cuja tag seja dada. |
| lower | Coloca o ítem cuja tag seja dada, abaixo do ítem indicado. |
| move | Move os ítens cuja tag seja dada, para a posição indicada no canvas. A nova posição será um deslocamento da posição atual. |
| postscript | Gera um arquivo Encapsulated Postscript, representando a parte do canvas especificada. Suporta muitas opções que serão tratadas mais adiante. |
| raise | Coloca o ítem cuja tag seja dada, acima do ítem indicado. |
| scale | Reescala os ítens indicados pela tag dada. |
| scan | Veja os comandos de scroll na aula 29. |
| select adjust | Ajusta o final da seleção no ítem indicado, para uma nova posição. |
| select clear | Remove a seleção do ítem indicado. |
| select from | Ajusta a âncora da seleção no ítem indicado. |
| select item | Retorna a identificação do ítem selecionado. |
| select to | Ajusta a seleção no ítem especificado. |
| type | Retorna o tipo do primeiro ítem apontado pela tag dada. |
| xview | Rola a janela do canvas horizontalmente. |
| yview | Rola a janela do canvas verticalmente. |
Veja as especificações de
procura para o comando find:
| Especificação | Descrição |
| above | Seleciona o ítem que esteja depois do ítem cuja tag seja dada. |
| all | Seleciona todos os ítens dentro do canvas. |
| bellow | Seleciona o ítem que esteja antes do ítem cuja tag seja dada. |
| closest | Seleciona o ítem que esteja mais próximo das coordenadas dadas depois do ítem dado. |
| enclosed | Seleciona todos os ítens que estejam dentro da área X1 Y1 X2 Y2 dada. |
| overlapping | Seleciona todos os ítens que ultrapassam ou estejam dentro da área X1 Y1 X2 Y2 dada. |
| withtag | Seleciona todos os ítens cuja tag seja dada.. |
Veja os tipos de ítens suportado pelo widget canvas, e suas opções:
arc
nome_do_canvas create arc x1 y1 x2 y2 [opção valor ...]
| Opção | Descrição |
| -fill | Cor do preechimento. |
| -outline | Cor da linha. |
| -stipple | Um bitmap. |
| -tags | Nome da tag para identificar o objeto. |
| -width | Largura da linha. |
| -extent | Ângulo final. |
| -outlinestipple | Bitmap usado para desenhar a linha. |
| -start | Ângulo inicial. |
| -style | Estilo: pieslice( fatia de pizza ), chord( corda ), ou arc( arco ). |
bitmap
nome_do_canvas create bitmap x y [opção valor ...]
| Opção | Descrição |
| -anchor | Posição da âncora. |
| -background | Cor de fundo. |
| -bitmap | O bitmap. |
| -foreground | Cor de primeiro plano. |
| -tags | Nome da tag para identificar o objeto. |
image
nome_do_canvas create image x y [opção valor ...]
| Opção | Descrição |
| -anchor | Posição da âncora. |
| -image | A imagem. |
| -tags | Nome da tag para identificar o objeto. |
line
nome_do_canvas create line x1 y1 x2 y2 ... xN yN [opção valor ...]
| Opção | Descrição |
| -fill | Cor do preechimento. |
| -smooth | Se 1 a linha será desenhada como uma curva. Caso contrário, não será uma curva. |
| -stipple | Um bitmap. |
| -tags | Nome da tag para identificar o objeto. |
| -width | Largura da linha. |
| -arrow | Especifica se a linha será terminada por uma seta: none, first, last, both. |
| -arrowshape | Uma lista com três elementos que descrevem a seta. |
| -capstyle | Como desenhar os pontos finais da linha: butt, projecting, round. |
| -joinstyle | Como devem ser as junções dos vértices: bevel, miter, round. |
| -splinesteps | Ângulo da curva. |
oval
nome_do_canvas create oval x1 y1 x2 y2 [opção valor ...]
| Opção | Descrição |
| -fill | Cor do preechimento. |
| -outline | Cor da linha. |
| -stipple | Um bitmap. |
| -tags | Nome da tag para identificar o objeto. |
| -width | Largura da linha. |
polygon
nome_do_canvas create polygon x1 y1 x2 y2 ... xN yN [opção valor ...]
| Opção | Descrição |
| -fill | Cor do preechimento. |
| -smooth | Se 1 a linha será desenhada como uma curva. Caso contrário, não será uma curva. |
| -stipple | Um bitmap. |
| -tags | Nome da tag para identificar o objeto. |
| -width | Largura da linha. |
| -splinesteps | Ângulo da curva. |
rectangle
nome_do_canvas create rectangle x1 y1 x2 y2 [opção valor ...]
| Opção | Descrição |
| -fill | Cor do preechimento. |
| -outline | Cor da linha. |
| -stipple | Um bitmap. |
| -tags | Nome da tag para identificar o objeto. |
| -width | Largura da linha. |
text
nome_do_canvas create text x y [opção valor ...]
| Opção | Descrição |
| -anchor | Âncora. |
| -fill | Cor do preechimento. |
| -font | Nome e propriedades da fonte. |
| -justify | Alinhamento do texto: left, right ou center. |
| -stipple | Um bitmap. |
| -tags | Nome da tag para identificar o objeto. |
| -text | String a ser exibida. |
| -width | Largura da linha de texto. Se 0, a quebra ocorrerá somente se for encontrado um caractere de quebra de linha "\n". |
window
nome_do_canvas create window x y [opção valor ...]
| Opção | Descrição |
| -anchor | Âncora. |
| -height | Altura da janela. |
| -width | Largura da janela. |
| -window | Nome da janela que deve ser associada ao ítem. |
| -tags | Nome da tag para identificar o objeto. |
A seguir estão as opções
suportadas pelo comando postscript:
| Opção | Descrição |
| -colormap | Especifica uma variável que deve conter um vetor cujos elementos contém o código Postscript para uma cor em particular. |
| -colormode | Pode ser: color, grey ou mono. |
| -file | Nome do arquivo a ser gerado. Caso não seja fornecido nenhum nome, o Postscript será retornado como resultado da execução do comando. |
| -fontmap | Especifica o mapa da fonte que deve ser usado. É uma variável contendo um vetor cujos elementos são listas de dois elementos: {font size}. |
| -height | Altura da área do canvas que deve ser impressa. O default é a altura do canvas. |
| -pageanchor | Âncora da posição da impressão sobre o papel. O default é center. |
| -pageheight | Altura da impressão no papel. |
| -pagewidth | Largura da impressão no papel. |
| -pagex | Ponto de posicionamento X. |
| -pagey | Ponto de posicionamento Y. |
| -rotate | Se 1, rotaciona a pagina de 90 graus: "landscape". Caso contrário, não rotaciona. |
| -width | Largura da área do canvas que deve ser impressa. O default é a largura do canvas. |
| -x | Coordenada X do canto superior esquerdo da área do canvas a ser impressa. |
| -y | Coordenada Y do canto superior esquerdo da área do canvas a ser impressa. |
As opções PostScript serão estudadas na aula 20, que trata de técnicas de impressão.
O Exemplo a seguir mostra como "soltar" os objetos dentro de um canvas, para que eles possam ser posicionados com o mouse:
global mover1 mover2
set mover1 0
set mover2 0
toplevel .t
canvas .t.c
pack .t.c -expand 1 -fill both
.t.c create rectangle 5 5 50 50 -fill blue -tags item1
.t.c create arc 100 100 200 200 -style pieslice -start 45 -extent 225 -fill red -tags item2Criará uma janela com um canvas em seu interior e desenhará um retângulo azul e um semi-círculo vermelho dentro do canvas.
.t.c bind item1 <ButtonPress> {set mover1 1}
.t.c bind item1 <ButtonRelease> {set mover1 0}
.t.c bind item1 <Motion> {
if {$mover1 == 1} {
.t.c move item1 [expr %x - [lindex [.t.c coords item1] 0]] [expr %y - [lindex [.t.c coords item1] 1]]
}
}Configura o item item1, o retângulo, para que se movimente para a posição do mouse sobre a janela caso o botão do mouse esteja pressionado sobre o ele.
.t.c bind item2 <ButtonPress> {set mover2 1}
.t.c bind item2 <ButtonRelease> {set mover2 0}
.t.c bind item2 <Motion> {
if {$mover2 == 1} {
.t.c move item2 [expr %x - [lindex [.t.c coords item2] 0]] [expr %y - [lindex [.t.c coords item2] 1]]
}
}Configura o item item2, o semi-círculo, para que se movimente para a posição do mouse sobre a janela caso o botão do mouse esteja pressionado sobre o ele.
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