miércoles, 2 de noviembre de 2016

Capítulo 81: Continuando con los gráficos en Python


Diario de un programador. Día 183

Dibujando gráficos

Al igual que en Small Basic, aquí también se pueden dibujar gráficos, tales como líneas, círculos, cuadrados etc. Siendo la base casi la misma, solamente cambiando un poco la sintaxis.
Para crear los gráficos antes mencionados, se debe crear además de la ventana, un lienzo(canvas).  El lienzo es el que nos permite dibujar. Imaginar que la ventana es el escritorio de un pintor y el lienzo es el papel donde dibujará sus creaciones.
A diferencia del botón que utiliza los parámetros text y command, un lienzo(objeto canvas) necesita los parámetros ancho y alto (en pixeles) y el resto del código es casi lo mismo que el utilizado para crear un botón:
Ejemplo:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 300, height = 300)
lienzo.pack()

Al cambiar los parámetros ancho y alto (width, height) cambia el tamaño de la ventana y por ende el tamaño del lienzo.

Al ejecutar el programa anterior, esto es lo que se puede ver:


A simple vista el lienzo tiene la misma apariencia que la ventana, pero créeme... está ahí y permite el dibujo de gráficos.
Como dije en un principio, esto es similar a Small Basic y por lo mismo, aquí también hay que indicar coordenadas para dibujar las figuras, siendo la esquina superior izquierda la coordenada 0,0.

Dibujando líneas

Para crear una línea, se utiliza la instrucción nombreLienzo.create_line(x1,y1, x2,y2), donde nombreLienzo, corresponde al nombre de nuestro lienzo. Las coordenadas x1,y1 corresponden a la ubicación inicial de la línea y las coordenadas x2,y2 corresponden a la ubicación final. Por ejemplo para dibujar una línea diagonal, podemos hacer lo siguiente:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 300, height = 300)
lienzo.pack()
lienzo.create_line(10,10, 50,100)

Esto muestra lo siguiente:


Otro ejemplo:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 300, height = 300)
lienzo.pack()
lienzo.create_line(20,100, 100,50)


En el ejemplo, agregué la posición de las coordenadas para hacer que se vea más claro.
Con estos conocimientos, vamos a crear un cuadrado utilizando líneas. El código sería algo así:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 400, height = 300)
lienzo.pack()

lienzo.create_line(100,50,200,50)
lienzo.create_line(100,50,100,150)
lienzo.create_line(100,150,200,150)
lienzo.create_line(200,50,200,150)


O crear un pequeño abanico de líneas:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 400, height = 300)
lienzo.pack()

x1 = 100
y1 = 100

for i in range(11):
    lienzo.create_line(x1,y1,200,100)
    x1 = x1 + 10
    y1 = y1 - 10

x1 = 200
y1 = 0

for i in range(11):
    lienzo.create_line(x1,y1,200,100)
    x1 = x1 + 10
    y1 = y1 + 10   


Dibujando rectángulos

Al igual que en Small Basic, aquí también se pueden crear figuras geométricas. Por ejemplo para crear un rectángulo se hace de la siguiente manera:
lienzo.create_rectangle(x1,y1, x2,y2), donde x1,y1 corresponde a la esquina superior izquierda del cuadrado y la coordenada x2,y2 corresponde a la esquina inferior derecha (es como dibujar una diagonal) Ejemplo:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 400, height = 300)
lienzo.pack()

lienzo.create_rectangle(50,50,200,200)


Otro ejemplo:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 400, height = 300)
lienzo.pack()

x2 = 100
y2 = 100

for i in range(10):
    lienzo.create_rectangle(10,10,x2,y2)
    x2 = x2 + 10
    y2 = y2 + 10


Otro ejemplo:

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 400, height = 300)
lienzo.pack()

x1 = 50
y1 = 50
x2 = 100
y2 = 100

for i in range(5):
    lienzo.create_rectangle(x1,y1,x2,y2)
    x1 = x1 + 25
    y1 = y1 + 25
    x2 = x2 + 25
    y2 = y2 + 25   


Otro ejemplo. Dibujando una matriz de 7 x 7

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 400, height = 300)
lienzo.pack()

x1 = 25
y1 = 25
x2 = 50
y2 = 50

for i in range(7):
    y2 = y2 + 25   
    y1 = y1 + 25 
    for j in range(7):
        lienzo.create_rectangle(x1,y1,x2,y2)
        x1 = x1 + 25
        x2 = x2 + 25
    x1 = 25
    x2 = 50


Esto es todo por ahora, en el próximo tutorial se continuará esta revisión de figuras en python. Saludos.


Gustavo J. Cerda Nilo
Septiembre 2016, Octubre 2016



No hay comentarios:

Publicar un comentario

C++ El apuntador This

El apuntador This En C++, cada objeto tiene acceso a su propia dirección a través de un puntero o apuntador denominado This. Lo...