Friday, 20 October 2017
TkInter canvas

Aplicaciones de Tkinter canvas

.
    Para realizar un dibujo es necesario generar un área de dibujo, la cual corresponde a una instancia de la clase de objetos tk, denominada canvas. El aŕea de dibuja se introduce en una zona definida por una instancia contenedora de la clase Tk(). El widget canvas puede ser acotado en su tamaño mediante la definición de su altura y ancho mediante: width =***** y height = ***. Una vez creada el área de dibujo, se produce a realizar las graficaciones.
    En un canvas de 200 pixeles de alto y 500 de ancho, la posición (0,0) se encuentra en la parte alta y a la izquierda del rectángulo asociado al área del canvas, y el punto (500,200) se encuentra en el extremo derecho parte baja del área del canvas. El primer valor del par ordenado es el valor de “x” y el segundo el valor de “y” de dicho punto, ambos medidos dentro del canvas.


canva1
Para dibujar una línea dentro del canvas se utiliza el siguiente comando:
w.create_lilne(x1,y1, x2,y2, otras opciones)

    Para dibujar un rectángulo dentro del canvas se utiliza el siguiente comando:
w.create_rectangule(x1,y1, x2,y2, opciones)
Para dibujar algunas figuras en algún canvas utilice  estos comandos:

w.create_text(230,230, text="Hola mundo", fill="purple",      font= ("Helvectica", "16"))

w.create_arc ( x0, y0, x1, y1, option, ... )
w.create_image ( x, y, option, ... )
w.create_polygon ( x0, y0, x1, y1, ..., option, ... )
w.create_oval ( x0, y0, x1, y1, option, ... )


Algunas opciones de elementos de canvas son:

*. fill: rellenar con algún color.

*. Width: ancho del borde, el default es 1 pizel.



Dibujando un rectángulo y una línea recta.


from Tkinter import *

master = Tk()

w = Canvas(master, width=200, height=100)
w.pack()

w.create_line(0, 0, 200, 100)


w.create_rectangle(10, 25, 150, 75)

mainloop()

    Para dibujar funciones utilice while o for, donde el intervalo de graficado debe  ser dividido en diferenciales finitos, pero lo suficientemente pequeños para mostar una continuidad de la curva. Por ejemplo si desea que en el canvas aparezca una función lineal y = 3*x, se puede usar el siguiente código:

dx = 0.02
x1= 0
for i in range(640):
    x1 += i*dx/2
    x2 = x1+dx*i/2
    y2  = 3*x2
    y1 = 3*x1
    w.create_line(x1,500-y1,x2,500-y2, fill= "red")

En este caso se quiere que la línea empiece dentro del canvas desde el punto (0,550) en adelante (hacia arriba).
    Para dibujar un sistema de coordenadas en primer cuadrante puede utilizar un código como el siguiente:
from Tkinter import *

master = Tk()

w = Canvas(master, width=500, height=500)
w.pack()

w.create_line(10, 100, 10, 400, width="2")

w.create_line(10, 400, 400, 400, width="2")


mainloop()


    Para hacer las marcas para los números utilice reglas de proporcionalidad para ubicar los puntos inicio y final de cada una de ellas. Para el caso de las marcas para el eje x , se puede utilizar un código como el siguiente:
ax =390/10
x_m=10
for i in range(10):
    x_m += ax
    w.create_line(x_m, 400, x_m, 390, width="1")
Para dibujar las marcas del eje vertical se utilizaría un código como el siguiente:
yx =300/10
y_m=100
for i in range(10):
    y_m += yx
    w.create_line(10, 500- y_m, 20,500- y_m, width="1")

    Si desea poner el título al gráfico se usa un código como el siguiente:

w.create_text(200,50,text="TITULO DEL GRAFICO")

Algo similar para los nombres de los ejes:
w.create_text(200,430,text="eje x")
w.create_text(25,90,text="eje y")

Para dibujar puntos:
x1=15
dy1=70
for i in range(5):
    x1+=35*i
    x2= x1+ 10
    y1=400 -dy1*i
    y2 = y1 -8
    w.create_oval(x1,y1,x2,y2)

Si desea poner los números principales alos ejes se hace algo similar a lo de las marcas de cada eje. Por ejemplo para el eje horizontal:

ax =390/10
x_m=10
for i in range(10):
    x_m += ax
    w.create_text(x_m,415, text=str(i))
    Para el eje “y” podría se indicada la numeración como se indica a continuación:
ay =300/10
y_m=-30
for i in range(10):
    y_m += ay
    w.create_text(15,400-y_m, text=str(i))

    

Para ilustrar el uso de la graficación e n python se presenta a continuación programa completo:

from Tkinter import *
master = Tk()
w = Canvas(master, width=500, height=500)
w.pack()
w.create_line(30, 100, 30, 400, width="2")
w.create_line(30, 400, 420, 400, width="2")
ax =390/10
x_m=30
for i in range(10):
    x_m += ax
    w.create_line(x_m, 400, x_m, 390, width="1")
yx =300/10
y_m=100
for i in range(10):
    y_m += yx
    w.create_line(30, 500- y_m, 40,500- y_m, width="1")
w.create_text(200,50,text="TITULO DEL GRAFICO")
w.create_text(200,430,text="eje x")
w.create_text(55,90,text="eje y")
x1=35
dy1=70
for i in range(5):
    x1+=35*i
    x2= x1+ 10
    y1=400 -dy1*i
    y2 = y1 -8
    w.create_oval(x1,y1,x2,y2)

ax =390/10
x_m=-8
for i in range(10):
    x_m += ax
    w.create_text(x_m,415, text=str(i))

ay =300/10
y_m=-30
for i in range(10):
    y_m += ay
    w.create_text(15,400-y_m, text=str(i))
mainloop()
    Para aquellos en que la programación de la graficación sea compleja se sugiere el uso de módulos separados, para la elaboración de ejes, introducción de datos, etc.


canvas2