jueves, 21 de septiembre de 2017

Nuevas figuras librería Tkinter (texto, poligono, letras)

#-*- coding: utf-8 -*-
from Tkinter import  *

ventanaPrincipal = Tk()  # Tk() Es la ventana principal
ventanaPrincipal.title("Ventana principal") # Título de la ventana
ventanaPrincipal.config(bg="orange")  # Le da color al fondo
ventanaPrincipal.geometry("860x400")  # Cambia el tamaño de la ventana

def ventanaH():
    ventanaHija = Toplevel(ventanaPrincipal)
    ventanaHija.title("Ventana hija")
    ventanaHija.protocol("WM_DELETE_WINDOW", "onexit")
    return ventanaHija


def ejecutar(f):
    ventanaPrincipal.after(200, f)  # Una forma de ejecutar las funciones


def circulo():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=210, height=210,bg='red')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_oval(10, 10, 200, 200, width=3, fill='blue')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def rectangulo():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=210, height=210,bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_rectangle(10, 10, 200, 200, width=5, fill='yellow')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def lineas():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=210, height=210,bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_line(0, 200, 200, 0, width=10, fill='purple')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def quesito():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=300, height=200, bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_arc(10, 10, 190, 190, width=3, start=270, extent=90, fill='pink')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def arco():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width =300, height=200, bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_arc(10, 10, 190, 190, width=3, start=0, extent=270, fill='yellow')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def pastel():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=300, height=300, bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_arc(10, 10, 190, 190, width=3, start=0, extent=270, fill='orange')  # Coordenadas y características de la figura
    figura.create_arc(20, 20, 200, 200, width=3, start=270, extent=90, fill='brown')

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def texto():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=400, height=300, bg='yellow')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_text(160,100,fill="purple",font="Times 30 italic bold",text="Texto\n hecho en python.")

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def poligono():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=400, height=300,bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_polygon(40, 40, 40, 140, 140, 140, 140, 100,fill="orange", outline="brown", width=6)

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()

def letras():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=400, height=300, bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    puntosFigura1 = [40, 40, 40, 200, 60, 200, 60, 80, 100, 160, 140, 80, 140, 200, 160, 200, 160, 40, 140, 40, 100, 120, 60, 40]
    figura.create_polygon(puntosFigura1, fill="#006600", outline="black", width=6)

    puntosFigura2=[40, 40, 60, 40, 80, 100, 100, 40, 120, 40, 90, 120, 120, 200, 100, 200, 80, 140, 60, 200, 40, 200, 70, 120]
    for i  in range(0,len(puntosFigura2)):
        if(i%2==0):
            puntosFigura2[i] +=140
    figura.create_polygon(puntosFigura2, fill="red", outline="black", width=6)

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


botonCirculo = Button(ventanaPrincipal, text="Mostrar circulo", command=lambda: ejecutar (circulo()))  # Primer boton
botonCirculo.grid (row=1, column=1)  # El botón es cargado

botonRectangulo = Button(ventanaPrincipal, text="Mostrar rectangulo", command=lambda: ejecutar (rectangulo()))  # Primer boton
botonRectangulo.grid (row=1, column=2)  # El botón es cargado

botonLineas = Button(ventanaPrincipal, text="Mostrar linea", command=lambda: ejecutar (lineas()))  # Primer boton
botonLineas.grid (row=1, column=3)  # El botón es cargado

botonQuesito = Button(ventanaPrincipal, text="Mostrar quesito", command=lambda: ejecutar (quesito()))  # Primer boton
botonQuesito.grid (row=1, column=4)  # El botón es cargado

botonArco = Button(ventanaPrincipal, text="Mostrar arco", command=lambda: ejecutar (arco()))  # Primer boton
botonArco.grid (row=1, column=5)  # El botón es cargado

botonPastel = Button(ventanaPrincipal, text="Mostrar pastel", command=lambda: ejecutar (pastel()))  # Primer boton
botonPastel.grid (row=1, column=6)  # El botón es cargado

botonTexto = Button(ventanaPrincipal, text="Mostrar texto", command=lambda: ejecutar (texto()))  # Primer boton
botonTexto.grid (row=1, column=7)  # El botón es cargado

botonPoligono = Button(ventanaPrincipal, text="Mostrar poligono", command=lambda: ejecutar (poligono()))  # Primer boton
botonPoligono.grid (row=1, column=8)  # El botón es cargado

botonPoligono = Button(ventanaPrincipal, text="Mostrar letras", command=lambda: ejecutar (letras()))  # Primer boton
botonPoligono.grid (row=1, column=9)  # El botón es cargado

ventanaPrincipal.mainloop()




viernes, 15 de septiembre de 2017

Nuevas figuras Tkinter en ventana hija (quesito, arco y pastel)

#-*- coding: utf-8 -*-
from Tkinter import  *

ventanaPrincipal = Tk()  # Tk() Es la ventana principal
ventanaPrincipal.title("Ventana principal") # Título de la ventana
ventanaPrincipal.config(bg="orange")  # Le da color al fondo
ventanaPrincipal.geometry("600x400")  # Cambia el tamaño de la ventana

def ventanaH():
    ventanaHija = Toplevel(ventanaPrincipal)
    ventanaHija.title("Ventana hija")
    ventanaHija.protocol("WM_DELETE_WINDOW", "onexit")
    return ventanaHija


def ejecutar(f):
    ventanaPrincipal.after(200, f)  # Una forma de ejecutar las funciones


def circulo():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=210, height=210,bg='red')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_oval(10, 10, 200, 200, width=3, fill='blue')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def rectangulo():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=210, height=210,bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_rectangle(10, 10, 200, 200, width=5, fill='yellow')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def lineas():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=210, height=210,bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_line(0, 200, 200, 0, width=10, fill='purple')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def quesito():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=300, height=200, bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_arc(10, 10, 190, 190, width=3, start=270, extent=90, fill='pink')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def arco():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width =300, height=200, bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_arc(10, 10, 190, 190, width=3, start=0, extent=270, fill='yellow')  # Coordenadas y características de la figura

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


def pastel():
    ventana = ventanaH()
    ventana.deiconify()
    figura = Canvas(ventana)
    figura.config(width=300, height=300, bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_arc(10, 10, 190, 190, width=3, start=0, extent=270, fill='orange')  # Coordenadas y características de la figura
    figura.create_arc(20, 20, 200, 200, width=3, start=270, extent=90, fill='brown')

    botonVentanaHija = Button(ventana, text="Cerrar", command=lambda: ejecutar(ventana.destroy()))
    botonVentanaHija.pack()


botonCirculo = Button(ventanaPrincipal, text="Mostrar circulo", command=lambda: ejecutar (circulo()))  # Primer boton
botonCirculo.grid (row=1, column=1)  # El botón es cargado

botonRectangulo = Button(ventanaPrincipal, text="Mostrar rectangulo", command=lambda: ejecutar (rectangulo()))  # Primer boton
botonRectangulo.grid (row=1, column=2)  # El botón es cargado

botonLineas = Button(ventanaPrincipal, text="Mostrar linea", command=lambda: ejecutar (lineas()))  # Primer boton
botonLineas.grid (row=1, column=3)  # El botón es cargado

botonQuesito = Button(ventanaPrincipal, text="Mostrar quesito", command=lambda: ejecutar (quesito()))  # Primer boton
botonQuesito.grid (row=1, column=4)  # El botón es cargado

botonArco = Button(ventanaPrincipal, text="Mostrar arco", command=lambda: ejecutar (arco()))  # Primer boton
botonArco.grid (row=1, column=5)  # El botón es cargado

botonPastel = Button(ventanaPrincipal, text="Mostrar pastel", command=lambda: ejecutar (pastel()))  # Primer boton
botonPastel.grid (row=1, column=6)  # El botón es cargado

ventanaPrincipal.mainloop()



jueves, 14 de septiembre de 2017

Juego del Gato con librería Tkinter

#-*- coding: utf-8 -*-
from Tkinter import *
import tkMessageBox     # Libreria para crear ventanas de diálogo
import tkSimpleDialog   # Libreria para crear ventanas de diálogo


# Variables globales.
ventanaPrincipal = Tk()
nombreJugador1 = ""                 # Variable que contendrá el nombre de un jugador.
nombreJugador2 = ""                 # Variable que contendrá el nombre de un jugador.
listaBotones = []                   # Lista/arreglo que almacenará cada uno de los botones del tablero de juego.
casillas = []                       # Lista/arreglo que almacenará la elección de cada jugador.
etiquetaTurnoJugador = StringVar()  # Declara una variable Tkinter(), de tipo cadena para mostrar el nombre del jugador.
numeroJugador = 0                   # Variable para cambiar entre jugador según el turno correspondiente.


# Función para configurar el diseño de la ventana principal y sus elementos.
def tablero():
    # Configuración de la ventana.
    ventanaPrincipal.title("Juego del gato")    # Título de la ventana
    ventanaPrincipal.geometry("370x460")        # Medidas de la ventana

    # Etiqueta en la que se muestra el nombre del jugador según sea su turno proporcionado por la variable turnoJugador
    etiquetaTurno = Label(ventanaPrincipal, textvariable=etiquetaTurnoJugador, font='bold 16')
    etiquetaTurno.place(x=130, y=10)    # Coordenadas de posición en la ventana.

    # Botón de inicio del juego que ejecuta a la función iniciarJuego()
    botonIniciar = Button(ventanaPrincipal, bg='blue', fg='white', text='Iniciar juego', cursor="sizing", width=15, height=3, command=lambda: iniciarJuego())
    botonIniciar.place(x=130, y=380)    # Coordenadas de posición en la ventana.

    # Lineas que dividen el tablero.
    linea1 = Canvas(ventanaPrincipal, width=310, height=10)
    linea1.place(x=30, y=140)           # Coordenadas de posición en la ventana.
    linea1.create_line(310, 0, 0, 0, width=25, fill='black')

    linea2 = Canvas(ventanaPrincipal, width=310, height=10)
    linea2.place(x=30, y=240)           # Coordenadas de posición en la ventana.
    linea2.create_line(310, 0, 0, 0, width=25, fill='black')

    linea3 = Canvas(ventanaPrincipal, width=10, height=310)
    linea3.place(x=130, y=45)           # Coordenadas de posición en la ventana.
    linea3.create_line(0, 310, 0, 0, width=25, fill='black')

    linea4 = Canvas(ventanaPrincipal, width=10, height=310)
    linea4.place(x=230, y=45)           # Coordenadas de posición en la ventana.
    linea4.create_line(0, 310, 0, 0, width=25, fill='black')

    # Botones del tablero de juego que ejecutan la función selección() enviando un número que hace referencia a su posición.
    boton0 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(0))
    listaBotones.append(boton0) # El botón se almacena en la lista de botones.
    boton0.place(x=50, y=70)    # Coordenadas de posición en la ventana.

    boton1 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(1))
    listaBotones.append(boton1)  # El botón se almacena en la lista de botones.
    boton1.place(x=150, y=70)    # Coordenadas de posición en la ventana.

    boton2 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(2))
    listaBotones.append(boton2)  # El botón se almacena en la lista de botones.
    boton2.place(x=250, y=70)    # Coordenadas de posición en la ventana.

    boton3 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(3))
    listaBotones.append(boton3)  # El botón se almacena en la lista de botones.
    boton3.place(x=50, y=170)    # Coordenadas de posición en la ventana.

    boton4 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(4))
    listaBotones.append(boton4)  # El botón se almacena en la lista de botones.
    boton4.place(x=150, y=170)   # Coordenadas de posición en la ventana.

    boton5 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(5))
    listaBotones.append(boton5)  # El botón se almacena en la lista de botones.
    boton5.place(x=250, y=170)   # Coordenadas de posición en la ventana.

    boton6 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(6))
    listaBotones.append(boton6)  # El botón se almacena en la lista de botones.
    boton6.place(x=50, y=270)    # Coordenadas de posición en la ventana.

    boton7 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(7))
    listaBotones.append(boton7)  # El botón se almacena en la lista de botones.
    boton7.place(x=150, y=270)   # Coordenadas de posición en la ventana.

    boton8 = Button(ventanaPrincipal, width=9, height=3, relief=SOLID, cursor="pencil", command=lambda: selecion(8))
    listaBotones.append(boton8)  # El botón se almacena en la lista de botones.
    boton8.place(x=250, y=270)  # Coordenadas de posición en la ventana.

    # Se llena la lista -> casillas = [] con la letra "N" para que la lista tenga un tamaño de 9 elementos.
    for i in range(0, 9):       # Ciclo en el que se le asignan valores a la variable "i" en un rango de 0 a 8.
        casillas.append("N")    # Se almacena la letra N en la posición i de la lista/arreglo.


# Función para bloquear todos los botones del tablero según sea necesario.
def bloquearInicio():
    for i in range(0, 9):                           # Ciclo en el que se le asignan valores a la variable "i" en un rango de 0 a 8.
        listaBotones[i].config(state="disable")     # Se inhabilita el botón en la posición i de la lista/arreglo.


# Función para iniciar la ejecución del juego.
def iniciarJuego():
    for i in range(0, 9):                           # Ciclo en el que se le asignan valores a la variable "i" en un rango de 0 a 8.
        listaBotones[i].config(state="normal")      # Se habilita el botón en la posición i de la lista/arreglo.
        listaBotones[i].config(bg="lightgray")      # Se le asigna un nuevo fondo al botón.
        listaBotones[i].config(text="")             # Se le asigna una cadena de texto vacía al botón para limpiar cualquier texto anterior.
        casillas[i] = "N"                           # Para no tener que reiniciar la ventana al volver a precionar el botón Iniciar juego.
    print casillas

    global nombreJugador1, nombreJugador2           # Se llama a las variables globales a las que vamos a acceder.

    # Lanza una ventana de diálogo en la que se puede ingresar una cadena de texto, la cual se va almacenar en la variable.
    # Se le envía como parametro el título de la ventana y un mensaje para mostrar.
    nombreJugador1 = tkSimpleDialog.askstring("Jugador", "Escribe el nombre del jugador 1: ")
    nombreJugador2 = tkSimpleDialog.askstring("Jugador", "Escribe el nombre del jugador 2: ")

    # Comprobamos que no se hayan ingresado datos sin tipo a las variables de los nombres o cadenas vacías
    # Si se cumple la condición anterior se concatena el contenido de nombreJugador1 a la etiqueta que muestra los turnos.
    if ((nombreJugador1 and nombreJugador2) is not None) and ((nombreJugador1 and nombreJugador2)!=""):
        etiquetaTurnoJugador.set("Turno: " + nombreJugador1)
    else:
    #Si no se cumple la condición aparece una ventana informando el error, y se bloquea el inicio del juego.
        tkMessageBox.showwarning("Error", "Favor de llenar correctamente los nombres de usuario.")
        bloquearInicio()


# Función que slecciona y marca el botón (casilla) deacuerdo al turno y al jugador, recibiendo como parámetro el número del botón.
def selecion(numero):
    global numeroJugador, nombreJugador1, nombreJugador2    # Se llama a las variables globales a las que vamos a acceder

    if numeroJugador == 0:                                  # Se verifica que la casilla contenga N y que sea el turno del jugador 0.
        listaBotones[numero].config(text="X")               # Coloca X en el botón.
        listaBotones[numero].config(bg="white")             # Cambia el fondo del botón.
        casillas[numero] = "X"                              # Se almacena X en la lista casillas = []
        numeroJugador = 1                                   # Cambia el turno del jugador.
        etiquetaTurnoJugador.set("Turno: " + nombreJugador2)# La etiqueta cambia y muestra el nombre del otro jugador.
        print casillas

    elif casillas[numero] == "N" and numeroJugador == 1:    # Se verifica que la casilla contenga N y que sea el turno del jugador 1.
        listaBotones[numero].config(text="O")               # Coloca O en el botón.
        listaBotones[numero].config(bg="lightblue")         # Cambia el fondo del botón.
        casillas[numero] = "O"                              # Se almacena O en la lista casillas = []
        numeroJugador = 0                                   # Cambia el turno del jugador.
        etiquetaTurnoJugador.set("Turno: " + nombreJugador1)# La etiqueta cambia y muestra el nombre del otro jugador.
        print casillas

    listaBotones[numero].config(state="disable")            # El botón seleccionado de acuerdo a su número (parámetro enviado) se desactiva.

    verificarVictoria()                                     # Se llama a la función verificarVictoria() al finalizar la selección en cada turno.


# Función que ejecuta las condiciones de victoria.
def verificarVictoria():
    # Verificación de victoria horizontal para el numeroJugador = 0 (1).
    if (casillas[0] == "X" and casillas[1] == "X" and casillas[2] == "X") or (
        casillas[3] == "X" and casillas[4] == "X" and casillas[5] == "X") or (
        casillas[6] == "X" and casillas[7] == "X" and casillas[8] == "X"):
        bloquearInicio()  # Bloquemos las botones.
        # Mostramos ventana de victoria con nombreJugador1.
        tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador1)

    # Verificación de victoria vertical para el numeroJugador = 0 (1).
    elif (casillas[0] == "X" and casillas[3] == "X" and casillas[6] == "X") or (
          casillas[1] == "X" and casillas[4] == "X" and casillas[7] == "X") or (
          casillas[2] == "X" and casillas[5] == "X" and casillas[8] == "X"):
          bloquearInicio() # Bloquemos las botones.
          # Mostramos ventana de victoria con nombreJugador1.
          tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador1)

    # Verificación de victoria diagonal para el numeroJugador = 0 (1).
    elif (casillas[0] == "X" and casillas[4] == "X" and casillas[8] == "X") or (
          casillas[2] == "X" and casillas[4] == "X" and casillas[6] == "X"):
        bloquearInicio()  # Bloquemos las botones.
        # Mostramos ventana de victoria con nombreJugador1.
        tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador1)

    # Verificación de victoria horizontal para el numeroJugador = 1 (2).
    elif (casillas[0] == "O" and casillas[1] == "O" and casillas[2] == "O") or (
          casillas[3] == "O" and casillas[4] == "O" and casillas[5] == "O") or (
          casillas[6] == "O" and casillas[7] == "O" and casillas[8] == "O"):
          bloquearInicio()  # Bloquemos las botones.
          # Mostramos ventana de victoria con nombreJugador2.
          tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador2)

    # Verificación de victoria vertical para el numeroJugador = 1 (2).
    elif (casillas[0] == "O" and casillas[3] == "O" and casillas[6] == "O") or (
          casillas[1] == "O" and casillas[4] == "O" and casillas[7] == "O") or (
          casillas[2] == "O" and casillas[5] == "O" and casillas[8] == "O"):
          bloquearInicio()  # Bloquemos las botones.
          # Mostramos ventana de victoria con nombreJugador2.
          tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador2)

    # Verificación de victoria diagonal para el numeroJugador = 1 (2).
    elif (casillas[0] == "O" and casillas[4] == "O" and casillas[8] == "O") or (
          casillas[2] == "O" and casillas[4] == "O" and casillas[6] == "O"):
          bloquearInicio()  # Bloquemos las botones.
          # Mostramos ventana de victoria con nombreJugador2.
          tkMessageBox.showinfo("Ganaste", "Ganaste jugador: " + nombreJugador2)

    # Si todas las condiciones anteriores no se cumplen y todas las casillas han sido seleccionadas
    # muestra una ventana de diálogo indicando el empate.
    elif (casillas[0] != "N" and casillas[1] != "N" and casillas[2] != "N" and
          casillas[3] != "N" and casillas[4] != "N" and casillas[5] != "N" and
          casillas[6] != "N" and casillas[7] != "N" and casillas[8] != "N"):
          bloquearInicio()  # Bloquemos las botones.
          # Mostramos ventana de empate con los nombres de los jugadores.
          tkMessageBox.showinfo("Empate", "Los jugadores: " + nombreJugador1 + " y " + nombreJugador2 + " han empatado.")



tablero()                   # Se ejecuta la función tablero para crear todos los elementos de la ventana de juego.
bloquearInicio()            # Bloqueamos los botones.
ventanaPrincipal.mainloop() # Se ejecuta la ventana principal.


lunes, 11 de septiembre de 2017

Práctica con funciones y figuras Tkinter en ventana hija

1. Círculo, rectángulo y línea en vantana hija. (Forma 1: Funciones)
#-*- coding: utf-8 -*-
from Tkinter import  *

ventanaPrincipal = Tk()  # Tk() Es la ventana principal
ventanaPrincipal.title("Ventana principal") # Título de la ventana
ventanaPrincipal.config(bg="orange")  # Le da color al fondo
ventanaPrincipal.geometry("500x400")  # Cambia el tamaño de la ventana

ventanaHija = Toplevel(ventanaPrincipal)
ventanaHija.title("Ventana hija")
ventanaHija.protocol("WM_DELETE_WINDOW", "onexit")

figura = Canvas(ventanaHija)

def ejecutar(f):
    lista = figura.find_all()
    ventanaPrincipal.after(200, f)  # Una forma de ejecutar las funciones
    try:
        figura.delete(figura.find_below(lista[1]))
    except:
        print (figura.find_all())

def circulo(ventana):
    ventanaHija.deiconify()
    figura.config(width=210, height=210,bg='red')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_oval(10, 10, 200, 200, width=3, fill='blue')  # Coordenadas y características de la figura

def rectangulo(ventana):
    ventanaHija.deiconify()
    figura.config(width=210, height=210,bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_rectangle(10, 10, 200, 200, width=5, fill='yellow')  # Coordenadas y características de la figura

def lineas(ventana):
    ventanaHija.deiconify()
    figura.config(width=210, height=210,bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    figura.create_line(0, 200, 200, 0, width=10, fill='purple')  # Coordenadas y características de la figura

def ocultar(ventana):
    ventanaHija.withdraw()

botonCirculo = Button(ventanaPrincipal, text="Mostrar circulo", command=lambda: ejecutar (circulo(ventanaHija)))  # Primer boton
botonCirculo.grid (row=1, column=1)  # El botón es cargado

botonRectangulo = Button(ventanaPrincipal, text="Mostrar rectangulo", command=lambda: ejecutar (rectangulo(ventanaHija)))  # Primer boton
botonRectangulo.grid (row=1, column=2)  # El botón es cargado

botonLineas = Button(ventanaPrincipal, text="Mostrar linea", command=lambda: ejecutar (lineas(ventanaHija)))  # Primer boton
botonLineas.grid (row=1, column=3)  # El botón es cargado

botonVentanaHija= Button(ventanaHija, text="Cerrar", command=lambda: ejecutar(ocultar(ventanaHija)))
botonVentanaHija.pack()

ventanaHija.withdraw()
ventanaPrincipal.mainloop()




2. Círculo, rectángulo y línea en vantana hija. (Forma 2: Clases y funciones)
#-*- coding: utf-8 -*-
from Tkinter import  *

v = Tk()  # Tk() Es la ventana principal
v.title("Ventana Principal")
v.geometry("500x500")
v.config(bg="brown")
class main(Frame):
    def __init__(self, master=None):
        Frame.__init__(self,master)
        self.pack()

        ventanaHija = Toplevel(self)
        ventanaHija.title("Ventana hija")
        ventanaHija.protocol("WM_DELETE_WINDOW", "onexit")
        ventanaHija.withdraw()
        botonVentanaHija = Button(ventanaHija, text="Cerrar", command=lambda: self.ocultar(ventanaHija))
        botonVentanaHija.pack()

        figura = Canvas(ventanaHija)

        botonCirculo = Button(self, text="Mostrar circulo",command=lambda:self.ejecutar(self.circulo(ventanaHija,figura),ventanaHija,figura))  # Primer boton
        botonCirculo.grid(row=1, column=1)  # El botón es cargado

        botonRectangulo = Button(self, text="Mostrar rectangulo",command=lambda:self.ejecutar(self.rectangulo(ventanaHija,figura),ventanaHija,figura))  # Primer boton
        botonRectangulo.grid(row=1, column=2)  # El botón es cargado

        botonLineas = Button(self, text="Mostrar linea",command=lambda:self.ejecutar(self.lineas(ventanaHija,figura),ventanaHija,figura))  # Primer boton
        botonLineas.grid(row=1, column=3)  # El botón es cargado

    def ejecutar(self,f,ventana,figura):
        lista = figura.find_all()
        ventana.after(200, f)  # Una forma de ejecutar las funciones
        try:
            figura.delete(figura.find_below(lista[1]))
        except:
            print (figura.find_all())

    def circulo(self,ventana,figura):
        ventana.deiconify()
        figura.config(width=210, height=210,bg='red')  # Lienzo con las medidas y color sobre el que se dibujará la figura
        figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
        figura.create_oval(10, 10, 200, 200, width=3, fill='blue')  # Coordenadas y características de la figura

    def rectangulo(self,ventana,figura):
        ventana.deiconify()
        figura.config(width=210, height=210,bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
        figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
        figura.create_rectangle(10, 10, 200, 200, width=5, fill='yellow')  # Coordenadas y características de la figura

    def lineas(self,ventana,figura):
        ventana.deiconify()
        figura.config(width=210, height=210,bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
        figura.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
        figura.create_line(0, 200, 200, 0, width=10, fill='purple')  # Coordenadas y características de la figura

    def ocultar(self,ventana):
        ventana.withdraw()

objeto = main(master=v)
objeto.mainloop()




domingo, 10 de septiembre de 2017

Práctica con funciones y figuras Tkinter

1. Círculo en ventana principal.
#-*- coding: utf-8 -*-
from Tkinter import  *

ventanaPrincipal = Tk()  # Tk() Es la ventana principal
ventanaPrincipal.title("Ventana de figura con botón") # Título de la ventana
ventanaPrincipal.config(bg="orange")  # Le da color al fondo
ventanaPrincipal.geometry("500x500")  # Cambia el tamaño de la ventana

def ejecutar(f):
    ventanaPrincipal.after(200, f)  # Una forma de ejecutar las funciones

def circulo(ventana):
    circulo = Canvas(width=210, height=210,bg='red')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    circulo.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    circulo.create_oval(10, 10, 200, 200, width=3, fill='blue')  # Coordenadas y características de la figura

botonCirculo = Button(ventanaPrincipal, text="Mostrar circulo", command=lambda: ejecutar (circulo(ventanaPrincipal)))  # Primer botón
botonCirculo.grid (row=1, column=1)  # El botón es cargado

ventanaPrincipal.mainloop()      




2. Rectángulo en ventana principal.
#-*- coding: utf-8 -*-
from Tkinter import  *

ventanaPrincipal = Tk()  # Tk() Es la ventana principal
ventanaPrincipal.title("Ventana de figura con botón") # Título de la ventana
ventanaPrincipal.config(bg="brown")  # Le da color al fondo
ventanaPrincipal.geometry("500x500")  # Cambia el tamaño de la ventana

def ejecutar(f):
    ventanaPrincipal.after(200, f)  # Una forma de ejecutar las funciones

def rectangulo(ventana):
    rectangulo = Canvas(width=210, height=210,bg='white')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    rectangulo.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    rectangulo.create_rectangle(10, 10, 200, 200, width=5, fill='yellow')  # Coordenadas y características de la figura

botonRectangulo = Button(ventanaPrincipal, text="Mostrar cuadro", command=lambda: ejecutar (rectangulo(ventanaPrincipal)))  # Primer boton
botonRectangulo.grid (row=1, column=1)  # El botón es cargado

ventanaPrincipal.mainloop()




3. Línea en ventana principal.
#-*- coding: utf-8 -*-
from Tkinter import  *

ventanaPrincipal = Tk()  # Tk() Es la ventana principal
ventanaPrincipal.title("Ventana de figura con botón") # Título de la ventana
ventanaPrincipal.config(bg="pink")  # Le da color al fondo
ventanaPrincipal.geometry("500x500")  # Cambia el tamaño de la ventana

def ejecutar(f):
    ventanaPrincipal.after(200, f)  # Una forma de ejecutar las funciones

def lineas(ventana):
    lineas = Canvas(width=210, height=210,bg='gray')  # Lienzo con las medidas y color sobre el que se dibujará la figura
    lineas.pack(expand=YES, fill=BOTH)  # Sirve para cargar la figura
    lineas.create_line(0, 200, 200, 0, width=10, fill='purple')  # Coordenadas y características de la figura

botonLinea = Button(ventanaPrincipal, text="Mostrar linea", command=lambda: ejecutar (lineas(ventanaPrincipal)))  # Primer botón
botonLinea.grid (row=1, column=1)  # El botón es cargado

ventanaPrincipal.mainloop()



miércoles, 6 de septiembre de 2017

Video 12 - Curso de Python: Funciones

Ejemplo 1: Programa en el que se declara una función para sumar dos cantidades numéricas.



Ejemplo 2: Programa en el que se declara una función para sumar dos cantidades numéricas, que se inicializan en los parámetros de la función. Y se manda llamar a dicha función enviándole un solo parámetro.


Ejemplo 3: Programa en el que se declara una función para sumar dos cantidades numéricas, que se inicializan en los parámetros de la función. Y se manda llamar a dicha función enviándole los dos parámetros.


Ejemplo 4: Programa en el que se declara una función para imprimir una cadena de texto las veces que se indiquen. Y se manda llamar a dicha función enviándole la cadena de texto.


Ejemplo 5: Programa en el que se declara una función para imprimir una cadena de texto las veces que se indiquen. Y se manda llamar a dicha función enviándole la cadena de texto y el número de veces a imprimir.


Ejemplo 6: Programa en el que se declara una función para imprimir una cadena de texto las veces que se indiquen. Y se manda llamar a dicha función enviándole la cadena de texto, el número de veces a imprimir y otras cadenas de texto.


Ejemplo 7: Programa en el que se declara una función para imprimir una cadena de texto las veces que se indiquen. Y se manda llamar a dicha función enviándole la cadena de texto, el número de veces a imprimir y un diccionario con una clave.


Ejemplo 8: Programa en el que se declara una función que retorna la suma dos cantidades numéricas y la imprime en consola.



Ejercicios de ventanas en Python (2)

Ejemplo 9: Programa que crea una ventana con color de fondo, un tamaño asignado y dos botones con los eventos para abrir y ocultar una ventana, ademas de una ventana hija que permanece oculta y responde a las funciones anteriores. Una función que imprime hola en la consola.





Ejemplo 10: Programa que crea una ventana con color de fondo, un tamaño asignado y dos botones con los eventos para abrir y ocultar una ventana, ademas de una ventana hija que permanece oculta y responde a las funciones anteriores. Una función que imprime en la consola al oprimir el botón abrir ventana secundaria.





Ejemplo 11: Programa que crea una ventana con color de fondo, un tamaño asignado y dos botones con los eventos para abrir y ocultar una ventana, ademas de una ventana hija que permanece oculta y responde a las funciones anteriores. Una función que imprime en la consola al oprimir el botón abrir ventana secundaria. Además evita que la ventana secundaria sea cerrada desde la barra de título y se agrega un botón en para salir desde la ventana secundaria.




lunes, 4 de septiembre de 2017

Geometría Fractal

Un fractal es una figura, que puede ser espacial o plana, formada por componentes infinitos. Su principal característica es que su apariencia y la manera en que se distribuye estadísticamente no varía aun cuando se modifique la escala empleada en la observación.

Los fractales son, por lo tanto, elementos calificados como semi geométricos (por su irregularidad no pertenecen a la geometría tradicional) que disponen de una estructura esencial que se reitera a distintas escalas.

El fractal puede ser creado por el hombre, incluso con intenciones artísticas, aunque también existen estructuras naturales que son fractales (como los copos de nieve).

De acuerdo a Mandelbrot, los fractales pueden presentar 3 clases diferentes de autosimilitud, lo que significa que las partes tienen la misma estructura que el conjunto total:
  • Autosimilitud exacta, el fractal resulta idéntico a cualquier escala;
  • Cuasiautosimilitud, con el cambio de escala, las copias del conjunto son muy semejantes, pero no idénticas;
  • Autosimilitud estadística, el fractal debe tener dimensiones estadísticas o de número que se conserven con la variación de la escala.
La geometría fractal es una de las cosas más vistosas de la matemática, generando figuras de una simetría compleja y desconcertante para el observador no experto. Los artistas la utilizan para hacer cuadros, y muchas ramas de la ciencia para dar explicación a multitud de fenómenos y situaciones inexplicables según la geometría clásica no-fractal.

Enlaces:
https://www.pythoniza.me/dibujos-con-python-turtle/
http://www.academia.edu/4266396/Creando_arboles_fractales_con_Turtle_en_Python

Ejercicio de ventanas en Python (Centrar ventana)

8. Programa que mediante un botón con función permite centrar la ventana secundaria