domingo, 6 de noviembre de 2016

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

Continuación del tutorial anterior...

 Dibujando óvalos

Para dibujar un óvalo se utiliza la siguiente sintaxis:

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


Esto muestra lo siguiente:


create_oval utiliza coordenadas como si de un rectángulo se tratase. Esto es así, porque el rectángulo le indica a Tkinter el espacio que tiene para dibujar el óvalo. Por ejemplo, si dibujamos un rectángulo con las mismas coordenadas o parámetros que utilizamos para crear el óvalo anterior, nuestro rectángulo cubriría toda el área ocupada por el óvalo. Veamos a lo que me refiero. Agregaré la siguiente línea al programa anterior y luego lo ejecutaré.


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


Entonces, para dibujar un óvalo, hay que imaginar que se dibuja un rectángulo imaginario, ya que nuestro óvalo se dibujará dentro de él.
Otro ejemplo:

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


Si se hiciera un rectángulo con los mismos parámetros, ocurriría lo mismo que el ejemplo anterior. Veamos

from tkinter import *
ventana = Tk()
lienzo = Canvas(ventana, width = 300, height = 300)
lienzo.pack()
lienzo.create_oval(50,50, 200,100)
lienzo.create_rectangle(50,50, 200,100)


Rellenando con color

Para dibujar una figura rellena con algún color, simplemente se debe agregar el parámetro fill, de esta forma:
fill = "color"
Por ejemplo, para dibujar un cuadrado relleno de color azul, se hace de la siguiente manera:

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

lienzo.create_rectangle(50,50,200,200, fill = "blue")


Vamos a hacer un programa que muestre un botón y un cuadrado. Cuando se presione ese botón, el cuadrado cambiará de color. Veamos una forma de lograr esto:
from tkinter import *

def cuadro_color():
    cadena = int(modelo.get())
    color = ""
    if cadena == 1:
        color = "green"
    if cadena == 2:
        color = "red"
    if cadena == 3:
        color = "blue"
    if cadena == 4:
        color = "orange"       
    if cadena == 5:
        color = "yellow"   
    if cadena == 6:
        color = "pink"
    if cadena == 7:
        color = "purple"
    if cadena == 8:
        color = "violet"
    if cadena == 9:
        color = "magenta"
    if cadena == 10:
        color = "cyan"
    cuadro = lienzo.create_rectangle(50,50,100,100, fill = color)
    cadena = cadena + 1

    if cadena >= 10:
        cadena = 1
    model(cadena)
       
def model(valor):
    modelo.set(valor)
   
   
ventana = Tk()
lienzo = Canvas(ventana, width = 150, height = 150)
modelo = StringVar()
modelo.set(1)

cuadro = lienzo.create_rectangle(50,50,100,100)
boton = Button(ventana, text = "Enviar", command = cuadro_color)

lienzo.pack()
boton.pack(side = BOTTOM)


Al presionar el botón, cambia los colores del cuadrado.

En este programa ocupé la función creada en el capítulo anterior de python (destacada con amarillo). En esa ocasión mencioné que me sería útil para ir actualizando valores, bueno, aquí un pequeño ejemplo de ello.

Color de la línea de borde

Por defecto, las figuras vienen con un  borde de color negro, pero eso se puede modificar si se agrega el argumento outline de la siguiente forma. Ejemplo:

cuadrado = lienzo.create_rectangle(100,100,200,200, outline = "blue")

Esto se vería de la siguiente forma:


Creando otros tipos de polígonos

Para crear otro tipo de polígonos, se utiliza la función create_polygon. Con esta función, por ejemplo, si quisiera crear un triángulo, tendría que indicar tres grupos de coordenadas xy o si quisiera crear un hexágono, tendría que indicar seis grupos de coordenadas xy etc.
Ejemplo de creación de un triángulo
from tkinter import *

ventana = Tk()
lienzo = Canvas(ventana, width = 300, height = 300)
lienzo.pack()
triangulo = lienzo.create_polygon(20,20,20,100,100,100)


Por defecto, la figura viene con un relleno de color negro, para cambiar el color se debe colocar como ya dijimos el argumento fill = "color" o si deseamos que la figura no tenga relleno, entonces se debe indicar una cadena vacía en lugar del color, pero al hacer eso, debemos especificar el color del borde, de lo contrario no se dibujará la figura. De esta manera:
triangulo = lienzo.create_polygon(20,20,20,100,100,100, fill = "", outline = "black")


El hexágono me quedó de la siguiente manera:
h = lienzo.create_polygon(50,20,80,50,80,80,50,110,20,80,20,50, fill = "", outline = "black")

Elementos al azar

Podemos crear figuras en distintas posiciones de la ventana si ocupamos el modulo random. Este módulo nos permite crear un número al azar. Para ocupar este módulo lo primero que se debe hacer es importarlo de la siguiente manera:

import random

Luego, para crear el número al azar, se utiliza la función random.randrange(x), donde x corresponde al límite del rango de números seleccionados al azar. Por ejemplo si X es igual a 10, eso quiere decir que el número al azar será un número entre 0 y 9
  
Ejemplo:
En el ejemplo anterior se pudo ver un simple ejemplo del uso del módulo random.
Otro ejemplo del uso de random, será crear coordenadas al azar para crear distintos tipos de triángulos. El código me quedó de la siguiente manera:

from tkinter import *
import random

ventana = Tk()
lienzo = Canvas(ventana, height = 300, width = 300)

x1 = random.randrange(200)
y1 = random.randrange(200)
x2 = random.randrange(200)
y2 = random.randrange(200)
x3 = random.randrange(200)
y3 = random.randrange(200)

triangulo = lienzo.create_polygon(x1,y1,x2,y2,x3,y3,fill = "",outline = "black")
lienzo.pack()


Al ejecutar el programa, se creará un triángulo con coordenadas al azar.

Esto es todo por ahora. Hasta la próxima


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...