tkinter Canvas

El widget canvas en tkinter nos brinda una superficie sobre la que podemos dibujar distintas figuras, imágenes, texto, etc., para cada uno de ellos tenemos un método de la forma: canvas.create_*, por ejemplo para dibujar una línea tenemos: canvas.create_line o canvas.create_image para dibujar una imagen en el canvas.

Para dibujar siempre debemos indicar la coordenada que indica donde se posiciona el dibujo, las coordenadas (X, Y) inicial (0, 0) se encuentran en la esquina superior izquierda de la ventana.

coordenadas usadas por tkinter-canvas

Veamos nuestro primer ejemplo, crearemos un widget canvas y dibujaremos un par de líneas.

from tkinter import *

canvas = Canvas(width=400, height=300, bg='white')
canvas.pack(expand=YES, fill=BOTH)
canvas.create_line(10, 10, 80, 80)
canvas.create_line(10, 80, 80, 10)

mainloop()

El código Canvas(width=400, height=300, bg='white') crea el objeto canvas, aprovechamos para establecer el ancho, la altura y el color de fondo de este widget, la siguiente línea de código es la siguiente, pack(expand=YES, fill=BOTH), como sabemos el método pack se encarga de posicionar el widget, usamos expand=YES para indicar que el canvas se expande con la ventana, y fill=BOTH establece que este widget debe rellenar todo el espacio vertical u horizontal, con esto tenemos un canvas que ocupa toda la ventana.

El método create_line() es el encargado de dibujar una línea, debemos indicar las coordenadas (X, Y) iniciales, los dos primeros parámetros, este es el punto donde inicia la línea, también requerimos indicara las coordenadas (X, Y) donde termina la línea, para ello usamos los dos últimos parámetros.

dibujar lineas en tkinter canvas

Otros métodos para dibujar figuras y texto que tenemos disponibles son:

canvas.create_oval(100, 10, 180, 80, width=2, fill='blue')
canvas.create_arc(200, 10, 280, 100)
canvas.create_rectangle(10, 100, 200, 200, width=5, fill='red')
canvas.create_text(100, 280, text='tkinter canvas', fill='green')

Donde oval crea una elipse, arc un semicírculo, rectangle dibuja un rectángulo y text dibuja la cadena de texto indicada, en este ejemplo usamos width= para establecer el grosor del borde de la figura a dibujar, fill= establece el color de relleno.

tkinter canvas dibujar elipse, semi circulo, rectangulo.

Al dibujar con create_arc podemos cambiar el estilo de la figura, tenemos tres disponibles que podemos establecer con el argumento, style=PIESLICE, este es el asignado por defecto, además tenemos, CHORD y ARC, el ángulo de inicio se establece con start y el angula final será la suma del ángulo de inicio más el valor establecido en extent, ambos en grados.

tkinter estilos de arcos

Hemos mencionado que es posible dibujar imágenes sobre el elemento canvas, para hacerlo usamos el método create_image al mismo debemos pasarle un objeto PhotoImage que indica cual es la imagen que deseamos dibujar, usaremos una imagen en formato GIF si deseamos usar otros formatos debemos instalar PIL.

photo=PhotoImage(file='images/HappyFish.gif')
canvas.create_image(10, 10, image=photo, anchor=NW)

Usamos image para indicar la imagen que deseamos dibujar, anchor establecer el origen de coordenadas de la imagen, NW quiere decir que el origen se encuentra en la esquina superior izquierda.

Este fragmento de código genera el siguiente resultado:

canvas dibujar imagen gif

También es posible usar la clase BitmapImage para cargar y dibujar una imagen en formato .xbm en el canvas, para ello usaríamos el método create_bitmap, se usa de igual manera que create_image.

Para finalizar veremos el método create_polygon, este nos permite dibujar una serie de líneas que estarán conectadas entre si, para dibujar la figura deseada indicamos el conjunto de vértices usado para crear la misma.

canvas.create_polygon(200, 10,
                      380, 280,
                      10, 100,
                      380, 100,
                      10, 280,
                      fill='',
                      outline='green',
                      dash=(5, 3))

Usamos fill='' para eliminar el color de relleno, si deseas puedes colocar tu color preferido, outline='...' establece el color del borde de la figura, y dash=(...) establece el patrón usado para dibujar las líneas del borde. 

canvas dibujar poligono

Como vemos dibujar en el canvas tkinter es muy sencillo, solo debes echarle un vistazo a la documentación para saber que parámetros podemos modificar y así obtener los resultados deseados.

Comentarios

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Detección de figuras geométricas

Procesamiento de imágenes en OpenCV

Conociendo la clase cv::Mat de OpenCV