Mostrando las entradas con la etiqueta Librerias. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Librerias. Mostrar todas las entradas

jueves, 22 de noviembre de 2018

Triangulo y Cubo 3D

Sintaxis del programa TRIANGULO:


import pygame
from pygame.locals import *


from OpenGL.GL import *
from OpenGL.GLU import *

verticies = (
    (1, -1, -1),
    (1, 1, -1),
    (-1, 1, -1),
    (-1, -1, -1),
    (0,0,1)

    )

edges = (
    (4,0),
    (4,1),
    (4,2),
    (4,3),
    (0,1),
    (0,3),
    (2,1),
    (2,3)

    )


def Cube():
    glBegin(GL_LINES)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(verticies[vertex])
    glEnd()


def main():
    pygame.init()
    display = (800,600)
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

    gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)

    glTranslatef(0.0,0.0, -5)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glRotatef(1, 3, 1, 1)
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        Cube()
        pygame.display.flip()
        pygame.time.wait(10)


main()

Corrida en pantalla:



Sintaxis del programa CUBO:


import pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *

verticies = (
    (1, -1, -1),
    (1, 1, -1),
    (-1, 1, -1),
    (-1, -1, -1),
    (1, -1, 1),
    (1, 1, 1),
    (-1, -1, 1),
    (-1, 1, 1)
    )

edges = (
    (0,1),
    (0,3),
    (0,4),
    (2,1),
    (2,3),
    (2,7),
    (6,3),
    (6,4),
    (6,7),
    (5,1),
    (5,4),
    (5,7)
    )


def Cube():
    glBegin(GL_LINES)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(verticies[vertex])
    glEnd()


def main():
    pygame.init()
    display = (800,600)
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL)

    gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)

    glTranslatef(0.0,0.0, -5)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glRotatef(1, 3, 1, 1)
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        Cube()
        pygame.display.flip()
        pygame.time.wait(10)


main()

Corrida en pantalla



Cubo animado en 3D

Sintaxis del programa:

import sys, math, pygame
from operator import itemgetter
class Point3D:
    def __init__(self, x=0, y=0, z=0):
        self.x, self.y, self.z = float(x), float(y), float(z)
    def rotateX(self, angle):
        """ Rotates the point around the X axis by the given angle in degrees. """
        rad = angle * math.pi / 180
        cosa = math.cos(rad)
        sina = math.sin(rad)
        y = self.y * cosa - self.z * sina
        z = self.y * sina + self.z * cosa
        return Point3D(self.x, y, z)
    def rotateY(self, angle):
        """ Rotates the point around the Y axis by the given angle in degrees. """
        rad = angle * math.pi / 180
        cosa = math.cos(rad)
        sina = math.sin(rad)
        z = self.z * cosa - self.x * sina
        x = self.z * sina + self.x * cosa
        return Point3D(x, self.y, z)

    def rotateZ(self, angle):
        """ Rotates the point around the Z axis by the given angle in degrees. """
        rad = angle * math.pi / 180
        cosa = math.cos(rad)
        sina = math.sin(rad)
        x = self.x * cosa - self.y * sina
        y = self.x * sina + self.y * cosa
        return Point3D(x, y, self.z)

    def project(self, win_width, win_height, fov, viewer_distance):
        """ Transforms this 3D point to 2D using a perspective projection. """
        factor = fov / (viewer_distance + self.z)
        x = self.x * factor + win_width / 2
        y = -self.y * factor + win_height / 2
        return Point3D(x, y, self.z)


class Simulation:
    def __init__(self, win_width=640, win_height=480):
        pygame.init()

        self.screen = pygame.display.set_mode((win_width, win_height))
        pygame.display.set_caption("Figura de cubo 3D en python")

        self.clock = pygame.time.Clock()

        self.vertices = [
            Point3D(-1, 1, -1),
            Point3D(1, 1, -1),
            Point3D(1, -1, -1),
            Point3D(-1, -1, -1),
            Point3D(-1, 1, 1),
            Point3D(1, 1, 1),
            Point3D(1, -1, 1),
            Point3D(-1, -1, 1)
        ]

        # Define the vertices that compose each of the 6 faces. These numbers are
        #  indices to the vertices list defined above.
        self.faces = [(0, 1, 2, 3), (1, 5, 6, 2), (5, 4, 7, 6), (4, 0, 3, 7), (0, 4, 5, 1), (3, 2, 6, 7)]

        # Define colors for each face
        self.colors = [(255, 0, 100), (100, 0, 0), (0, 25, 0), (0, 0, 255), (0, 255, 155), (255,5, 0)]

        self.angle = 0
    def run(self):
        """ Main Loop """
        while 1:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()

            self.clock.tick(50)
            self.screen.fill((0, 32, 0))

            # It will hold transformed vertices.            \
            t = []

            for v in self.vertices:
                # Rotate the point around X axis, then around Y axis, and finally around Z axis.
                r = v.rotateX(self.angle).rotateY(self.angle).rotateZ(self.angle)
                # Transform the point from 3D to 2D
                p = r.project(self.screen.get_width(), self.screen.get_height(), 256, 4)
                # Put the point in the list of transformed vertices
                t.append(p)

            # Calculate the average Z values of each face.
            avg_z = []
            i = 0
            for f in self.faces:
                z = (t[f[0]].z + t[f[1]].z + t[f[2]].z + t[f[3]].z) / 4.0
                avg_z.append([i, z])
                i = i + 1
            # Draw the faces using the Painter's algorithm:
            #  Distant faces are drawn before the closer ones.
            for tmp in sorted(avg_z, key=itemgetter(1), reverse=True):
                face_index = tmp[0]
                f = self.faces[face_index]
                pointlist = [(t[f[0]].x, t[f[0]].y), (t[f[1]].x, t[f[1]].y),
                             (t[f[1]].x, t[f[1]].y), (t[f[2]].x, t[f[2]].y),
                             (t[f[2]].x, t[f[2]].y), (t[f[3]].x, t[f[3]].y),
                             (t[f[3]].x, t[f[3]].y), (t[f[0]].x, t[f[0]].y)]
                pygame.draw.polygon(self.screen, self.colors[face_index], pointlist)

            self.angle += 1
            pygame.display.flip()


if __name__ == "__main__":
    Simulation().run()



Corrida en pantalla del programa:



Grafica de barras 3D

Sintaxis del programa:



from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt


fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')

xpos = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
ypos = [2,3,4,5,1,6,2,1,7,2,3,5,1,3,2]
num_elements = len(xpos)
zpos = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
dx = 1
dy =1
dz = [20,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

ax1.bar3d(xpos, ypos, zpos, dx, dy, dz, color='red')
plt.show()

Corrida en pantalla:


Sencilla animacion en python

En esta ocasion, veremos como crear una animacion muy sencilla con el modulo Tkinter y las funciones que un canvas nos permite utilizar.

Sintaxis del programa:



import Tkinter
import time

WIDTH=500
HEIGH=400

root=Tkinter.Tk()
canvas= Tkinter.Canvas(root,width=WIDTH,heigh=HEIGH)
root.title("Animacion")

canvas.pack()
ball=canvas.create_oval(10,10,60,60,fill='red')


for i in range(400):
    canvas.move(ball,1,0)
    root.update()
    time.sleep(0.05)
root.mainloop()


Si bien, durante esta animacion solo veras como el circulo se desplaza hacia la derecha poco a poco.
Esto es debido a lo que tenemos en la funcion canvas.move()

Esta funcion nos pide 3 parametros; objeto que vamos a mover, su coordenada x y coordenada y de cuanto se ira moviendo. Si colocamos solo la funcion sin el root.update o time.sleep, veras solamente el circulo hasta el extremo derecho de tu ventana tk.
Esto es porque, la funcion update de tu objeto tk, le permite ir actualizando la posicion del objeto a mover. Con esto, podras ver cada una de sus actualizaciones en el tiempo que va cambiando de coordenadas. Si a eso le agregamos el time.sleep, la animacion se vera mas fluida.





UPDATE...









miércoles, 21 de noviembre de 2018

Programa que agrega peliculas

Sintaxis del programa:



from Tkinter import *
from tkMessageBox import *
aux=0

def agregar_pelicula():
    Seleccion=pelicula.get()
    peliculas.append(Seleccion)
    peliculas_lista = OptionMenu(ventanap, index, *peliculas).place(x=300, y=82)




def quitar_pelicula():
    Seleccion=pelicula.get()
    peliculas.remove(Seleccion)
    peliculas_lista = OptionMenu(ventanap, index, *peliculas).place(x=300, y=82)

ventanap=Tk()
ventanap.geometry("400x250")
ventanap.title("Peliculas")
Label(ventanap,text="Escribe el titulo de una pelicula").place(x=30,y=55)
Label(ventanap,text="Peliculas").place(x=300,y=55)
pelicula=StringVar()
nombre=Entry(ventanap,textvariable=pelicula,width=34).place(x=20,y=90)
peliculas=[]
index=StringVar()
#peliculas_lista = OptionMenu(ventanap, index,*peliculas).place(x=300, y=82)
Button(ventanap,text="Agregar",command=agregar_pelicula).place(x=70,y=120)
Button(ventanap,text="Quitar",command=quitar_pelicula).place(x=140,y=120)
ventanap.mainloop()


Corrida del programa:






Programa que muestra la ruta de un programa

Sintaxis del programa:




from Tkinter import *
from tkFileDialog import *

def ruta():
    nombre= askopenfilename()
    Ruta.set(nombre)



root=Tk()
root.geometry("400x200")
Label(root,text="Pulsa el boton y elige una ruta").place(x=50,y=50)
Ruta=StringVar()
Entry(root,textvariable=Ruta,width=42).place(x=50,y=80)
Button(root,text="....",width=5,command=ruta).place(x=320,y=76)


root.mainloop()


Aqui podemos ver que para realizar necesitamos la libreria tkfiledialog, que es la que nos permitira ver las rutas de los archivos que tenemos en nuestro equipo. Asi, al seleccionar el boton activamos la funcion de askopenfilename() para asi asignar esa ruta en un campo de texto libre que se tiene.

Corrida en pantalla:




Programa que saluda al usuario con el nombre que el quiera

Sintaxis del programa:

from Tkinter import *
from tkMessageBox import *


def saludo():
    nombre=str(Nombre.get())
    showinfo("Message","Hola "+nombre)




vp=Tk()
vp.title("Saludador")
vp.geometry("400x300")
Texto1 = Label (vp,text="Escribe un nombre para saludar",font=("PhrasticMedium",13),fg="lightpink")
Texto1.place(x=80,y=20)
Nombre= StringVar()
entrada = Entry(vp,textvariable=Nombre).place(x=120,y=80)
boton = Button(vp,text="Saludar!",command=saludo).place(x=180,y=140)
vp.mainloop()



Esta es una pactica sencilla de com utilizar una interfaz grafica que realize alguna tarea en especifico.
En este ejemplo, toma el nombre que el usuario le de en nuestra caja de texto, posteriormente guarda ese dato en una variable que usara para mostrar un mensaje en la pantalla.

Corrida en pantalla.


jueves, 15 de noviembre de 2018

Unidad 4: Interfaz Grafica. Ejemplos 2

Ejemplo 1: Interes anual

Sintaxis de programa.


# !/usr/bin/env python#
# -*- coding: utf-8 -*-
# programa que calcula el interés anual



import sys
from Tkinter import *
import tkMessageBox


def interes():
    v1 = int(ent1.get())
    v2 = int(ent2.get())
    v3 = int(ent3.get())
    r = v1 * v2 / 100
    g = (r * v3)
    f = g + v1
    print "Cuando pasen", v3, "años, con un interes de", v2, " usted habrá generado", f, "pesos"


v = Tk()
v.title("Interes")
v.geometry("400x250")

vp = Frame(v)
vp.grid(column=0, row=0, padx=(50, 50), pady=(10, 10))
vp.columnconfigure(0, weight=1)
vp.rowconfigure(0, weight=1)

e1 = Label(vp, text="Pesos:")
e1.grid(row=2, column=4, padx=(20, 20), pady=(20, 20))

e2 = Label(vp, text="Interes:")
e2.grid(row=3, column=4, padx=(20, 20), pady=(20, 20))

e3 = Label(vp, text="Años:")
e3.grid(row=4, column=4, padx=(20, 20), pady=(20, 20))

val1 = ""
ent1 = Entry(vp, width=12, textvariable=val1)
ent1.grid(row=2, column=5)

val2 = ""
ent2 = Entry(vp, width=12, textvariable=val2)
ent2.grid(row=3, column=5)

val3 = ""
ent3 = Entry(vp, width=12, textvariable=val3)
ent3.grid(row=4, column=5)

b1 = Button(vp, text="Calcular", command=interes)
b1.grid(row=5, column=5, padx=(20, 20), pady=(20, 20))

v.mainloop()

Lo que podemos observar en este codigo es que tenemos un diseño sencillo para la implementacion de el calculo de intereses al año.
Primeramente, dentro de los objetos de tipo tkinter que tenemos contamos con 3 entry o cajas de texto para capturar los valores de :Interes,años y pesos.
De igual manera, tenemos un boton que al presionarlo va a la funcion creada en lineas mas arriba de la sintaxis. Todo esto, dentro de nuestro objeto Tk y su frame.

En cuanto a la funcion, tomamos los valores de las cajas de texto con la funcion ".get()", almacenando su contenido en una variable que nos servira para calcular lo deseado. A continuacion, solo le realiza la operacion basica para el caculo de intereses y termina por imprimir un mensaje con esa informacion en consola.

Corrida del programa.





Ejemplo 2: Gif con boton

Sintaxis del programa:




# Programa.- que toma un archivo GIF y lo muestra

# -*- coding: utf-8 -*-

from Tkinter import *

ventana = Tk()
ventana.geometry('400x400')
ventana.config(bg="lightpink")
ventana.title("Mostrando y ocultando un boton con una imagen")


def btn_hide():
    if b1.winfo_ismapped():
        b1.place_forget()
        b2.configure(text="Mostrar carita", width=15)
    else:
        b1.place(x=70, y=50)
        b2.configure(text="Ocultar carita", width=15)


imgBoton = PhotoImage(file="kda.gif")
b1 = Button(ventana, text="Boton 1", image=imgBoton, fg="pink", width=200)
b1.place(x=90, y=50)
b2 = Button(ventana, text="Ocultar carita", command=btn_hide, fg="black", width=15)
b2.place(x=130, y=280)

ventana.mainloop()

Corrida en pantalla del programa:



Al corres el programa, nos muestra la pantalla en un colo solido y con el boton que debe mostrar la imagen que tenga en codigo.(No es necesario que sea la misma, cualquier imagen .gif puede mostrarse. Si vas a hacer esto, asegurate que tu imagen este en la misma carpeta que tu programa).


Posteriormente, al presionar el boton nos mostrar la imagen que tenemos cargada en la parte superior de la ventana tk.


Ejemplo 3: Calendario

Sintaxis del programa:




#!/usr/bin/env phyton

#- * - coding: utf - 8 -*-
#Simple calendario con tkinter


import calendar
import Tkinter as tk
import datetime

# Obtenemos los valores del ano y mes a mostrar

ano = datetime.date.today ().year
mes = datetime.date.today ().month


def writeCalendar(ano, mes):
    # Asignamos el ano y mes al calendario

    str1 = calendar.month (ano, mes)
    label1.configure (text=str1)

def mesAnterior():
    global mes, ano
    mes -= 1

    if ano == 0:

     mes = 12

    ano -= 1
    writeCalendar (ano, mes)


def mesSiguiente():
    global mes, ano
    mes += 1

    if mes == 13:
     mes = 1

    ano += 1

    writeCalendar (ano, mes)


root = tk.Tk ()
root.title ("Calendario")

# Lo posicionamos en un label

label1 = tk.Label (root, text="", font=('courier', 40, 'bold'), bg='darkred', justify=tk.LEFT)
label1.grid (row=1, column=1)

# ponemos los botones dentro un Frame

frame = tk.Frame (root, bd=5)
anterior = tk.Button (frame, text="Anterior", command=mesAnterior)
anterior.grid (row=1, column=1, sticky=tk.W)
siguiente = tk.Button (frame, text="Siguiente", command=mesSiguiente)
siguiente.grid (row=1, column=2)
frame.grid (row=2, column=1)

writeCalendar (ano, mes)

# ejecutamos el evento loop

root.mainloop ()


Corrida en pantalla:

Gracias a las librerias que se importan en este programa, es mas sencillo tomar la fecha y fabricar asi el calendario de esta manera. Todo el diseño del calendario se encuentra dentro de una label, la cual dependiendo el boton que se presione va cambiando el mes y los dias de este a sus correspondientes.




Ejemplo 4: Programa que encripta y desencripta un mensaje

Sintaxis del programa



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

# Jesus Eduardo Martinez Hinojosa

# Ventana
ventana = Tk()
ventana.geometry("300x300+350+80")
ventana.title("Encriptador")
ventana.resizable(width=False, height=False)
try:
    ventana.iconbitmap("icono.ico")
except:
    print("no hay icono disponible")

# Clave
numclave = 1


# Funciones.
def boton1():
    # Cifrado Cesar
    TAM_MAX_CLAVE = 26

    def obtenerModo():
        modo = "e"
        return modo

    def obtenerMensaje():
        mensaje = text.get("0.0", END)
        return mensaje

    def obtenerClave():
        global numclave
        clave = numclave
        return clave

    def obtenerMensajeTraducido(modo, mensaje, clave):
        if modo[0] == 'd':
            clave = -clave
        traduccion = ''
        for simbolo in mensaje:
            if simbolo.isalpha():
                num = ord(simbolo)
                num += clave
                if simbolo.isupper():
                    if num > ord('Z'):
                        num -= 26
                    elif num < ord('A'):
                        num += 26
                elif simbolo.islower():
                    if num > ord('z'):
                        num -= 26
                    elif num < ord('a'):
                        num += 26
                traduccion += chr(num)
            else:
                traduccion += simbolo
        return traduccion

    modo = obtenerModo()
    mensaje = obtenerMensaje()
    if modo[0] != 'b':
        clave = obtenerClave()

    if modo[0] != 'b':
        texto = (obtenerMensajeTraducido(modo, mensaje, clave))
        text.delete("0.0", END)
        text.insert("0.0", texto)
        informe1.config(text="Texto Encriptado")
    else:
        for clave in range(1, TAM_MAX_CLAVE + 1):
            print(clave, obtenerMensajeTraducido('desencriptar', mensaje, clave))


def boton2():
    # Cifrado Cesar
    TAM_MAX_CLAVE = 26

    def obtenerModo():
        modo = "d"
        return modo

    def obtenerMensaje():
        mensaje = text.get("0.0", END)
        return mensaje

    def obtenerClave():
        global numclave
        clave = numclave
        return clave

    def obtenerMensajeTraducido(modo, mensaje, clave):
        if modo[0] == 'd':
            clave = -clave
        traduccion = ''
        for simbolo in mensaje:
            if simbolo.isalpha():
                num = ord(simbolo)
                num += clave
                if simbolo.isupper():
                    if num > ord('Z'):
                        num -= 26
                    elif num < ord('A'):
                        num += 26
                elif simbolo.islower():
                    if num > ord('z'):
                        num -= 26
                    elif num < ord('a'):
                        num += 26
                traduccion += chr(num)
            else:
                traduccion += simbolo
        return traduccion

    modo = obtenerModo()
    mensaje = obtenerMensaje()
    if modo[0] != 'b':
        clave = obtenerClave()

    if modo[0] != 'b':
        texto = (obtenerMensajeTraducido(modo, mensaje, clave))
        text.delete("0.0", END)
        text.insert("0.0", texto)
        informe1.config(text="Texto Desencriptado")
    else:
        for clave in range(1, TAM_MAX_CLAVE + 1):
            print(clave, obtenerMensajeTraducido('desencriptar', mensaje, clave))


def salir():
    ventana.destroy()


def menu_activacion(event):
    menu_despegable.post(event.x_root, event.y_root)


def cortar():
    text.clipboard_clear()
    text.clipboard_append(text.selection_get())
    sel = text.get(SEL_FIRST, SEL_LAST)
    text.delete(SEL_FIRST, SEL_LAST)


def copiar():
    text.clipboard_clear()
    text.clipboard_append(text.selection_get())


def pegar():
    tem = text.selection_get(selection="CLIPBOARD")
    text.insert(INSERT, tem)


# Widget
b1 = Button(ventana, text="Encriptar", bg='black', fg='white', activebackground='cyan',
            activeforeground='dark slate gray', command=boton1, font=("Courier New", 9))
b2 = Button(ventana, text="Desencriptar", bg='black', fg='white', activebackground='cyan',
            activeforeground='dark slate gray', command=boton2, font=("Courier New", 9))
text = Text(ventana, fg='lavender', bg='dark slate gray', font=("Courier New", 10))
informe1 = Label(ventana, text="Ingrese un texto", bg="turquoise", font=("Courier New", 10))

# Empaquetado de los widget
b1.place(x=10, y=260, width=120, height=30)
b2.place(x=167, y=260, width=120, height=30)

informe1.place(x=0, y=0, width=300, height=30)

text.place(x=0, y=30, height=218, width=300)

# Menu popup(menu despegable)
menu_despegable = Menu(ventana, tearoff=0)
menu_despegable.add_command(label="Cortar", command=cortar, font=("Courier New", 9))
menu_despegable.add_command(label="Copiar", command=copiar, font=("Courier New", 9))
menu_despegable.add_command(label="Pegar", command=pegar, font=("Courier New", 9))
menu_despegable.add_separator()
menu_despegable.add_command(label="Salir", command=salir, font=("Courier New", 9))

# Evento del menu despegable
text.bind("b3", menu_activacion)

# donde mantener el enfoque.
ventana.mainloop()

Corrida en pantalla



miércoles, 14 de noviembre de 2018

Unidad 4: Interfaz grafica. Ejemplos

En esta entrada estare mostrando algunas aportaciones de compañeros de semestres pasados al mio, en donde se utiliza la interfaz grafica con diferentes propositos en cada uno de estos.

Ejemplo 1: Signo Zodiacal

Sintaxis del programa:


# -*- coding: utf-8 -*-
import sys
import Tkinter as tk
from Tkinter import *
import tkMessageBox

ventana = Tk()
ventana.title("Signo Zodiacal")
ventana.geometry("400x200")
ventana.config(bg="rosybrown")

vp = Frame(ventana)
vp.grid(column=0, row=0, padx=(50, 50),
        pady=(10, 10))  # para posicionar cualquier objetovp.columnconfigure(0, weight=1)
vp.rowconfigure(0, weight=1)

var = StringVar(ventana)
ver= StringVar(ventana)
var.set("Enero")  # initial valuever = StringVar(ventana)
ver.set("1")  # initial value
etiqueta_mes = Label(ventana, text='Mes de nacimiento: ')
ent_mes = OptionMenu(ventana, var, "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto",
                     "Septiembre", "Octubre", "Noviembre", "Diciembre", )
etiqueta_mes.grid(row=1, column=1, padx=(10, 10), pady=(10, 10), sticky=E)
ent_mes.grid(row=1, column=3)

etiqueta_dia = Label(ventana, text='Dia de nacimiento: ')
ent_dia = OptionMenu(ventana, ver, "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
                     "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31")
etiqueta_dia.grid(row=4, column=1, padx=(10, 10), pady=(10, 10), sticky=E)
ent_dia.grid(row=4, column=3)


def signo():
    month = str(var.get())
    day = int(ver.get())
    if month == "Marzo" and day >= 21 or month == "Abril" and day <= 20:
        tkMessageBox.showinfo("Signo", "Eres Aries")
    elif month == "Abril" and day >= 21 or month == "Mayo" and day <= 21:
        tkMessageBox.showinfo("Signo", "Eres Tauro")
    elif month == "Mayo" and day >= 22 or month == "Junio" and day <= 21:
        tkMessageBox.showinfo("Signo", "Eres Gemenis")
    elif month == "Junio" and day >= 22 or month == "Julio" and day <= 22:
        tkMessageBox.showinfo("Signo", "Eres Cáncer")
    if month == "Julio" and day >= 23 or month == "Agosto" and day <= 23:
        tkMessageBox.showinfo("Signo", "Eres Leo")
    if month == "Agosto" and day >= 24 or month == "Septiembre" and day <= 23:
        tkMessageBox.showinfo("Signo", "Eres Virgo")
    if month == "Septiembre" and day >= 24 or month == "Octubre" and day <= 23:
        tkMessageBox.showinfo("Signo", "Eres Libra")
    if month == "Octubre" and day >= 24 or month == "Noviembre" and day <= 22:
        tkMessageBox.showinfo("Signo", "Eres Escorpión")
    if month == "Noviembre" and day >= 23 or month == "Diciembre" and day <= 21:
        tkMessageBox.showinfo("Signo", "Eres Sagitario")
    if month == "Diciembre" and day >= 22 or month == "Enero" and day <= 20:
        tkMessageBox.showinfo("Signo", "Eres Capricornio")
    if month == "Enero" and day >= 21 or month == "Febrero" and day <= 18:
        tkMessageBox.showinfo("Signo", "Eres Acuario")
    if month == "Febrero" and day >= 19 or month == "Marzo" and day <= 20:
        tkMessageBox.showinfo("Signo", "Eres Piscis")


boton = Button(ventana, text='Signo', command=signo, width=20)
boton.grid(row=5, column=1, padx=(10, 10), pady=(10, 10), sticky=E)

ventana.mainloop()

Corrida en pantalla del programa




Ejemplo 2 :Programa que determina si eres mayor de edad por tu año de nacimiento

Sintaxis del programa:



# Ejemplo de Edad con Spinbox.-
import sys
from Tkinter import *
import tkMessageBox


def CalcularEdad():
    Valor = int(CajaEdad.get())
    if (2018 - Valor >= 18):
        tkMessageBox.showinfo("Felicidades", "Eres Mayor de Edad!")
    elif (2018 - Valor <= 5):
        tkMessageBox.showinfo("Eehhh?", "Como puedes tener menos de 5  y usar este programa")
    elif ((2018 - Valor) > 8 and (2018 - Valor) < 18):
        tkMessageBox.showinfo("Alejate!", "Aun no posees la edad suficiente para seguir!")


ventana = Tk()
ventana.title("Mayor de edad")
ventana.geometry("600x400")

vp = Frame(ventana)  # estamos utilizando el objeto framevp.grid(column=0, row=0, padx =(50,50), pady=(10,10))
vp.grid(column=0, row=0, padx=(50, 50), pady=(10, 10))
vp.columnconfigure(0, weigh=1)
vp.rowconfigure(0, weight=1)

PreguntarEdad = Label(vp, text="Por favor ingrese su fecha de Nacimiento")
PreguntarEdad.grid(column=1, row=1, padx=(10, 10), pady=(10, 10))

CajaEdad = Spinbox(vp, from_=1980, to=2018, width=10)
CajaEdad.grid(column=2, row=1, padx=(10, 10), pady=(10, 10), sticky=N + S)

BotonCalcular = Button(vp, text="Calcular!", command=CalcularEdad)
BotonCalcular.grid(column=3, row=1, padx=(10, 10), pady=(10, 10))

ventana.mainloop()


Corrida en pantalla




Ejemplo 3: Programa que cuenta billetes y monedas

Sintaxis del programa(Este ya se encuentra dentro del blog,pero aun asi lo dejare en esta entrada).



from Tkinter import *
import tkMessageBox


def SumMul():
    try:
        _e0 = int(v0.get())
        _e0 = _e0 * .50
        _e1 = int(v1.get())
        _e1 = _e1 * 1
        _e2 = int(v2.get())
        _e2 = _e2 * 2
        _e3 = int(v3.get())
        _e3 = _e3 * 5
        _e4 = int(v4.get())
        _e4 = _e4 * 10
        _e5 = int(v5.get())
        _e5 = _e5 * 20
        _e6 = int(v6.get())
        _e6 = _e6 * 50
        _e7 = int(v7.get())
        _e7 = _e7 * 100
        _e8 = int(v8.get())
        _e8 = _e8 * 200
        _e9 = int(v9.get())
        _e9 = _e9 * 500
        _e10 = _e0 + _e1 + _e2 + _e3 + _e4 + _e5 + _e6 + _e7 + _e8 + _e9
        tkMessageBox.showinfo("El resultado es", _e10)
    except ValueError:
        tkMessageBox.showerror("Error","Ingresa numeros enteros")


v = Tk()
v.title("")
v.geometry("200x350")

vp = Frame(v)
vp.grid(column=0, row=0, padx=(50, 50), pady=(10, 10))
vp.columnconfigure(0, weight=1)
vp.rowconfigure(0, weight=1)

ET0 = Label(vp, text="MONEDAS")
ET0.grid(column=2, row=1)

e0 = Label(vp, text="0.50")
e0.grid(column=1, row=3)

e1 = Label(vp, text="1.00")
e1.grid(column=1, row=4)

e2 = Label(vp, text="2.00")
e2.grid(column=1, row=5)

e3 = Label(vp, text="5.00")
e3.grid(column=1, row=6)

e3 = Label(vp, text="10.00")
e3.grid(column=1, row=7)

v0 = ""
v0 = Entry(vp, width=5, textvariable=v0)
v0.grid(row=3, column=2)

v1 = ""
v1 = Entry(vp, width=5, textvariable=v1)
v1.grid(row=4, column=2)

v2 = ""
v2 = Entry(vp, width=5, textvariable=v2)
v2.grid(row=5, column=2)

v3 = ""
v3 = Entry(vp, width=5, textvariable=v3)
v3.grid(row=6, column=2)

v4 = ""
v4 = Entry(vp, width=5, textvariable=v4)
v4.grid(row=7, column=2)

ET1 = Label(vp, text="BILLETES")
ET1.grid(column=2, row=9)

e4 = Label(vp, text="20.00")
e4.grid(column=1, row=11)

e5 = Label(vp, text="50.00")
e5.grid(column=1, row=12)

e6 = Label(vp, text="100.00")
e6.grid(column=1, row=13)

e7 = Label(vp, text="200.00")
e7.grid(column=1, row=14)

e8 = Label(vp, text="500.00")
e8.grid(column=1, row=15)

v5 = ""
v5 = Entry(vp, width=5, textvariable=v5)
v5.grid(row=11, column=2)

v6 = ""
v6 = Entry(vp, width=5, textvariable=v6)
v6.grid(row=12, column=2)

v7 = ""
v7 = Entry(vp, width=5, textvariable=v7)
v7.grid(row=13, column=2)

v8 = ""
v8 = Entry(vp, width=5, textvariable=v8)
v8.grid(row=14, column=2)

v9 = ""
v9 = Entry(vp, width=5, textvariable=v9)
v9.grid(row=15, column=2)

b = Button(vp, text="TOTAL", command=SumMul)
b.grid(row=17, column=2, padx=(20, 20), pady=(20, 20))
etiqueta=Label(vp)

v.mainloop()

Corrida en pantalla



Ejemplo 4: Programa que calcula el IMC(Indice de masa corporal)

Sintaxis del programa:

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


def imc():
    num1 = int(entrada_peso.get())
    num2 = float(entrada_altura.get())
    imc = (num1 / (num2 * num2))

    if imc == 0 or imc < 18:
        tkMessageBox.showinfo("Resultado", "Peso bajo. Necesario valorar signos de desnutrición")

    elif imc == 18 or imc < 25:
        tkMessageBox.showinfo("Resultado", "Usted tiene un peso normal☻")

    elif imc == 25 or imc < 27:
        tkMessageBox.showinfo("Resultado", "Usted padece sobrepeso")

    elif imc == 27 or imc < 30:
        tkMessageBox.showinfo("Resultado", "Usted padece obesidad grado I")

    elif imc == 30 or imc < 40:
        tkMessageBox.showinfo("Resultado", "Usted padece de obesidad grado II")

    else:
        tkMessageBox.showinfo("Resultado", "Usted padece de obesidad morbida")


ventana = Tk()
ventana.title("Calculo de IMC")
ventana.geometry("400x200")
ventana.config(bg="rosybrown")

vp = Frame(ventana)
vp.grid(column=0, row=0, padx=(50, 50),
        pady=(10, 10))  # para posicionar cualquier objetovp.columnconfigure(0, weight=1)
vp.rowconfigure(0, weight=1)

peso = IntVar()
altura = float()

etiqueta_peso = Label(ventana, text='Peso(kg):', bg='ivory')
etiqueta_peso.grid(row=1, column=1, padx=(10, 10), pady=(10, 10), sticky=E)

entrada_peso = Entry(ventana, textvariable=peso)
entrada_peso.grid(row=1, column=2, padx=(10, 10), pady=(10, 10), sticky=E)

etiqueta_altura = Label(ventana, text='Altura(mts): ', bg='ivory')
etiqueta_altura.grid(row=2, column=1, padx=(10, 10), pady=(10, 10), sticky=E)

entrada_altura = Entry(ventana, textvariable=altura)
entrada_altura.grid(row=2, column=2, padx=(10, 10), pady=(10, 10), sticky=E)

bconv = Button(ventana, bg='plum', fg='white', text='Calcular IMC', width=10, height=1, command=imc)
bconv.grid(row=4, column=2, padx=(10, 10), pady=(10, 10))

ventana.mainloop()

Corrida en pantalla del programa



Ejemplo 5: Renta de peliculas y agregar peliculas

Sintaxis del programa


# coding=utf-8
#Aportacion de Brandon Asael Cerda Hernandez
#Programa: con listas, combo box, agrega a la lista las peliculas al guardar
#excelente programa en python!!!


# -*- coding: utf-8 -*-
from Tkinter import Label,Entry,Button,Tk,Frame,W,N,S,E,END,HORIZONTAL,Spinbox

from ttk import *
from tkMessageBox import askyesno,showinfo,showerror;
from Tkinter import *
#en el import, solo estoy pidiendo importar los elementos que vamos a usar, para no usar el * sin necesidad de traer mas elementos
def AddEntryMovie():

    Movie = CatchMovie.get()
    if (CatchMovie.get()==""):
        CatchMovie.config(bg="red")
        showerror("What Movie it is?", "Por favor ingresa una pelicula! no dejes el campo en blanco!")
        CatchMovie.config(bg="white")


    if (Classes.get()==""):
            #otra pequeña "excepcion" por si la clasificación de la pelicula no tiene seleccionada una clasificacion
        showerror("What Movie it is?","Por favor selecciona una clasificacion!")

    if (askyesno("Are you sure?", "Deseas añadir esta pelicula: \n\""+Movie+"\"\nA la lista de peliculas?")==True):
                values = list(MoviesOnList["values"])
                #se crea dentro de la funcion la Variable "values" que sera una lista de los valores que se encuentran en la lista despegable
                MoviesOnList["values"] = values + [Movie]
                #de la lista despegalble agregamos el nuevo valor que esta en nuestro campo de texto, para esto debemos ponerlo entre                #  [] para que se interprete como el valor de una lista y pueda sumarse a la lista despegable de peliculas
                Classifications.insert(i,Classes.get())
                #añade la clasificiación a una lista, para asi tenerla disponible en la Lista Despegable de Peliculas disponibles
                Mov.insert(i,Movie)
                i+1
                CatchMovie.delete(0, END)
                #ya lo hemos visto antes pero lo explicare aun asi, .delete(0, END) borra el texto dentro del Entry
                CatchMovie.insert(0, "")
                #Aqui es casi lo mismo, pero deja el campo Vacio y usable, tambien para evitar errores de captura
                Classes.set("")
                #Reinicia la Lista Despegable de las clasificaciones

                showinfo("Exito!","Has anadido: \""+Movie+"\" A la lista de Peliculas")
    else:
                showinfo("Guess No","La Pelicula: "+Movie+" No sera anadida")
def firstDone():
    if (askyesno("Are you sure?","ADVERTENCIA: ESTA ACCION NO PUEDE SER DESHECHA" "\nSi de verdad ya terminaste te agregar peliculas, prosigue, si no, DETENTE!")==True):
        CatchMovie.config(state="disable")
        Classes.config(state="disable")
        AddMov.config(state="disable")
        Done.config(state="disable")
        #tambien se habia visto antes, pero explicare aun asi, el 'state' "disable" deshabilita el componente del frame        app.geometry("600x300")
        #se puede cambiar la dimension de una ventana, aunque se haya establecido un tamaño, esto nos permite controlar la ventana y los componentes a mostrar
        MovietoRent.grid()
        MoviesOnList.grid()
        ClassifiedAs.grid()
        AskRent.grid()
        Days4Rent.grid()
        Rent.grid()
        #simplemente con .grid() vuelvo a colocar en su respectivo lugar, los elementos que no son visibles para el usuario, ocultos con '.grid_remove()'
        showinfo("","Puedes seguir agregando peliculas si gustas!")
def MovieSel(self):
    ClassifiedAs.config(state="normal")
    #para que un Entry pueda mostrar un texto, es necesario que este en un estado normal (state="normal")
    ClassifiedAs.delete(0, END)
    ClassifiedAs.insert(0, Classifications.__getitem__(Mov.index(MoviesOnList.get())))
    #aqui se hace uso de la Lista [] y el atributo "__getitem__()" para obtener lo que este en la lista, para ello    #es necesario poner un indice numerico, asi que utilizando ".index()" puedo llamar solo el indice (numero en la lista)    #y .__getitem__() obtendra el objeto que este en ese indice de la lista, para asi poder mostrar la clasificación correecta    ClassifiedAs.config(state="readonly")
    #al cambiar el estado a "Solo Lectura" (state="readonly") el Entry solo mostrara Texto, pero no permitira la entrada de datos o textos
def RentAMovie():
    if (askyesno("You ready?","Deseas Rentar la pelicula: "+MoviesOnList.get()+
                              "\n por "+Days4Rent.get()+" Dia/s?")==True):
        if (ClassifiedAs.get()=="Adultos"):
            if(askyesno("Age Issue","Eres Mayor de Edad?")==True):
                showinfo("Ask for: ","Presente su Identificación")
            else:
                showerror("Get outta here","NO SE RENTAN PELICULAS A MENORES")
        else:
            showinfo("Have a nice day!","Disfruta de tu pelicula! \nQue tengas un Buen dia :)")
    else:
        showinfo("Ok?","De acuerdo, revisa tus opciones entonces :)")
app = Tk()
app.geometry("600x120")
app.title("Lista de Peliculas")
vp = Frame(app)
vp.grid(column=0,row=0,padx=(30,30), pady=(20,20))
vp.rowconfigure(0, weight=1)
vp.columnconfigure(0, weight=1)
Classified = Label(vp, text="Clasificación")
Classified.grid(column=2, row=1, padx=(10,10), pady=(10,10))
AskMov = Label(vp, text="Ingrese una Pelicula: ")
AskMov.grid(column=1, row=1, padx=(10,10), pady=(10,10), sticky=W)
cMovie=StringVar
CatchMovie = Entry(vp, textvariable=cMovie, width=35)
CatchMovie.grid(column=1, row=2, padx=(10,10), pady=(10,10))
AddMov = Button(vp, text="Añadir", command=AddEntryMovie)
AddMov.grid(column=3, row=2, padx=(10,10), pady=(10,10))
Done = Button(vp, text="Finalizar", command=firstDone)
Done.grid(column=4, row=2, padx=(10,10), pady=(10,10))
Classes = Combobox (vp, state="readonly")
Classes.grid(column=2, row=2, padx=(10,10), pady=(10,10))
Classes["values"]=["Para todas las Edades","Familiar","Mayores de 10","Adolescentes","Mayores de 15","Adultos"]
Separator(vp, orient=HORIZONTAL).grid(column=1,row=3,columnspan=4,sticky=W+E,pady=(10,10))
MovietoRent = Label(vp, text="Pelicula a Rentar: ")
MovietoRent.grid(column=1, row=4, padx=(10,10), pady=(30,10), stick=W)
MovietoRent.grid_remove()
MoviesOnList = Combobox (vp, state="readonly")
MoviesOnList.grid(column=1,row=5,padx=(10,10),pady=(10,10), sticky=W+E)
MoviesOnList.bind(MovieSel)
MoviesOnList.grid_remove()
ClassifiedAs = Entry (vp,state="readonly")
ClassifiedAs.grid(column=2, row=5, padx=(10,10), pady=(10,10), sticky=W+E)
ClassifiedAs.grid_remove()
AskRent = Label(vp, text="Dias\n a Rentar")
AskRent.grid(column=3, row=4, padx=(10,10), pady=(10,10))
AskRent.grid_remove()
Days4Rent = Spinbox(vp,width=5, from_=1, to=7)
Days4Rent.grid(column=3, row=5, padx=(10,10), pady=(10,10), sticky=N+S)
Days4Rent.grid_remove()
Rent = Button(vp, text="Rentar", command=RentAMovie)
Rent.grid(column=4, row=5, padx=(10,10), pady=(10,10))
Rent.grid_remove()
Classifications = []
Mov = []
i = int(0)
app.mainloop()

Corrida en pantalla del programa.






Ejemplo 6: Capturar datos basicos

Sintaxis del programa:


from Tkinter import *
root = Tk()
root.title('formulario 1')
nombre_label = Label(root,text="Nombre :")
nombre_label.grid(row=1,column=1)
nombre_str = StringVar()
nombre_entry = Entry(root,textvariable=nombre_str)
nombre_entry.grid(row=1,column=2)
last_label= Label(root,text="Apellido : ")
last_label.grid(row=2,column=1)
last_str = StringVar()
last_entry = Entry(root,textvariable=last_str)
last_entry.grid(row=2,column=2)
mail_label = Label(root,text="Email : ")
mail_label.grid(row=3,column=1)
mail_str = StringVar()
mail_entry = Entry(root,textvariable=mail_str)
mail_entry.grid(row=3,column=2)
finish = Button(root,text="finalizar",relief=FLAT)
finish.grid(row=4,column=2)
root.mainloop()

Corrida en pantalla


viernes, 9 de noviembre de 2018

Juego de las chozas grafico. (Practica No.21)

Sintaxis del programa:


# -*- coding: utf-8 -*-

import sys
import random

from PIL import Image,ImageTk


if sys.version_info < (3, 0):
    from Tkinter import Tk, Label, Radiobutton, PhotoImage, IntVar
    import tkMessageBox as messagebox
else:
    from tkinter import Tk, Label, Radiobutton, PhotoImage, IntVar
    from tkinter import messagebox


class JuegoChozas:
    def __init__(self, parent):
        self.imagen_fondo = PhotoImage(file="Jungle_small_2.gif")
        self.imagen_choza = PhotoImage(file="Hut_small_2.gif")

        self.ancho_choza = 40
        self.alto_choza = 80
        self.container = parent

        self.Chozas = []
        self.result = ""

        self.ocupar_chozas()

        self.setup()

    def ocupar_chozas(self):
        ocupantes = ['enemigo', 'amigo', 'vacia']
        while len(self.Chozas) < 5:
            computer_choice = random.choice(ocupantes)
            self.Chozas.append(computer_choice)
        print("Los ocupantes de las chozas son:", self.Chozas)

    def entrar_choza(self, numero_choza):
        print("Entrando en la choza #:", numero_choza)
        ocupante_choza = self.Chozas[numero_choza-1]
        print("El ocupante de la choza es: ", ocupante_choza)

        if ocupante_choza == 'enemigo':
            self.result = "Enemigo visto en la choza # %d \n\n" % numero_choza
            self.result += "Has perdido :( Mucha suerte la próxima vez!"
        elif ocupante_choza == 'vacia':
            self.result = "La Choza # %d está vacia\n\n" % numero_choza
            self.result += "Enhorabuena! Has ganado!!!"
        else:
            self.result = "Amigo visto en la choza # %d \n\n" % numero_choza
            self.result += "Enhorabuena! Has ganado!!!"

        self.anunciar_ganador(self.result)

    def crear_widgets(self):

        self.var = IntVar()
        self.background_label = Label(self.container,
                                      image=self.imagen_fondo)
        txt = "Selecciona una choza en la que entrar. Ganarás si:\n"
        txt += "La choza está vacia o si su ocupante es tu aliado, de lo contrario morirás"
        self.info_label = Label(self.container, text=txt, bg='white')
        # Creamos un dicionario con las opciones para las imagenes de las chozas
        r_btn_config = {'variable': self.var,
                        'bg': '#8AA54C',
                        'activebackground': 'green',
                        'image': self.imagen_choza,
                        'height': self.alto_choza,
                        'width': self.ancho_choza,
                        'command': self.radio_btn_pressed}

        self.r1 = Radiobutton(self.container, r_btn_config, value=1)
        self.r2 = Radiobutton(self.container, r_btn_config, value=2)
        self.r3 = Radiobutton(self.container, r_btn_config, value=3)
        self.r4 = Radiobutton(self.container, r_btn_config, value=4)
        self.r5 = Radiobutton(self.container, r_btn_config, value=5)

    def setup(self):
        self.crear_widgets()
        self.setup_layout()

    def setup_layout(self):
        self.container.grid_rowconfigure(1, weight=1)
        self.container.grid_columnconfigure(0, weight=1)
        self.container.grid_columnconfigure(4, weight=1)
        self.background_label.place(x=0, y=0, relwidth=1, relheight=1)
        self.info_label.grid(row=0, column=0, columnspan=5, sticky='nsew')
        self.r1.grid(row=1, column=0)
        self.r2.grid(row=1, column=2)
        self.r3.grid(row=1, column=4)
        self.r4.grid(row=4, column=2)
        self.r5.grid(row=4, column=0)

    def anunciar_ganador(self, data):
        messagebox.showinfo("¡Atención!", message=data)

    # Handle Events
    def radio_btn_pressed(self):
        self.entrar_choza(self.var.get())

if __name__ == "__main__":

    mainwin = Tk()
    WIDTH = 1280
    HEIGHT = 700
    mainwin.geometry("%sx%s" % (WIDTH, HEIGHT))
    mainwin.resizable(0, 0)
    mainwin.title("Ataca a los orcos V 2.0.0 - El Videojuego")
    game_app = JuegoChozas(mainwin)
    mainwin.mainloop()



Corrida en pantalla del programa





Creditos al canal de Piensa 3D: https://www.youtube.com/watch?v=xbDa2bVmjSk

miércoles, 7 de noviembre de 2018

Juego de piedra,papel o tijeras en interfaz grafica. Aporte por Carlos Olvera Magno (Practica No. 19)

Sintaxis del programa:



from Tkinter import *  # libreria para utilizar las ventanas,labels,ventanasemergentes y botones
from tkMessageBox import *  # para poder utilizar el abra el cuadro de dialogo
import random  # para poder generar nuneros aleatorios


def funcion(opcion):
    tiposdemanos = ['piedra', 'papel', 'tijera']  # creo un arreglo con tres valores posibles
    eleccion_aleatoria = random.choice(
        tiposdemanos)  # a la variable le asigno un valor a traves de random utilizando uno de los tres valores que estan en el array
    decisioncpu = eleccion_aleatoria  # la variable decision cpu se iguala
    decision_usuario = opcion  # utilizo como parametro la variable opcion y la igualo a decision usuario para poder usarla en el if

    if decision_usuario == 1:  # el numero uno lo uso como tijera y ese valor se lo asigno al presionar el boton 'piedra'
        Decisionusuario = Label(ventana, text='elegiste piedra', font=("agency fb", 12)).place(x=50, y=220)
        imagen1 = PhotoImage(file='piedrausuario.gif')  # utilizo una imagen para mostrar mi seleccion
        lblusuario = Label(ventana, image=imagen1).place(x=50, y=300)  # muestro esa image a traves de un label
        DecisionCPU = Label(ventana, text=('la cpu eligio ' + decisioncpu), font=("agency fb", 12)).place(x=300,
                                                                                                          y=220)  # muestro en pantalla la decision random que genero
        if decisioncpu == "piedra":  # la decision random la comparo con cadenas de caracteres en los 3 casos
            imagen2 = PhotoImage(file='piedracpu.gif')  # eligo la imagen determinada
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)  # y la muestro en pantalla
            showinfo(title='resultado',
                     message='empate')  # atravez de una ventana emergente muestro si gano,perdio o empato

        elif decisioncpu == 'papel':
            imagen2 = PhotoImage(file='papelcpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='perdiste')

        else:
            imagen2 = PhotoImage(file='tijeracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado', message='Ganaste')



    elif decision_usuario == 2:
        imagen1 = PhotoImage(file='papelusuario.gif')
        lblusuario = Label(ventana, image=imagen1).place(x=50, y=300)
        Label10 = Label(ventana, text='elegiste papel', font=("agency fb", 12)).place(x=50, y=220)
        Label11 = Label(ventana, text=('la cpu eligio ' + decisioncpu), font=("agency fb", 12)).place(x=300, y=220)
        if decisioncpu == 'piedra':
            imagen2 = PhotoImage(file='piedracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            print 'haz ganado pax'
            showinfo(title='resultado ', message='Ganaste')
        elif decisioncpu == 'papel':
            imagen2 = PhotoImage(file='papelcpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            print 'empate'
            showinfo(title='resultado', message='empate')

        else:
            imagen2 = PhotoImage(file='tijeracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            print 'haz perdido!!!!'
            showinfo(title='resultado ', message='perdiste')

    elif decision_usuario == 3:
        imagen1 = PhotoImage(file='tijerausuario.gif')
        lblusuario = Label(ventana, image=imagen1).place(x=50, y=300)
        Label10 = Label(ventana, text='elegiste tijera', font=("agency fb", 12)).place(x=50, y=220)
        Label11 = Label(ventana, text=('la cpu eligio ' + decisioncpu), font=("agency fb", 12)).place(x=300, y=220)
        if decisioncpu == 'piedra':
            imagen2 = PhotoImage(file='piedracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='perdiste')
        elif decisioncpu == 'papel':
            imagen2 = PhotoImage(file='papelcpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='ganaste')
        else:
            imagen2 = PhotoImage(file='tijeracpu.gif')
            lblcpu = Label(ventana, image=imagen2).place(x=250, y=300)
            showinfo(title='resultado ', message='empate')


ventana = Tk()
ventana.geometry("500x500")
ventana.title('JUEGO DEL PIEDRA PAPEL O TIJERA')

label1 = Label(text="ELIGA UNO DE LOS 3", font=("agency fb", 18)).place(x=180, y=30)

label3 = Label(ventana, text='PIEDRA,PAPEL O TIJERA:').place(x=120, y=0)
label2 = Label(ventana, text='un juego clasico y sencillo').place(x=250, y=0)
# boton para piedra
Piedra = Button(ventana, text='piedra', command=lambda: funcion(1)).place(x=150, y=100)
# boton para papel
Papel = Button(ventana, text='papel', command=lambda: funcion(2)).place(x=250, y=100)
# boton para tijera
Tijera1 = Button(ventana, text='tijera', command=lambda: funcion(3)).place(x=350, y=100)

ventana.mainloop()


Corrida en pantalla del programa:



martes, 6 de noviembre de 2018

Juego de numero al azar en interfaz grafica. Aporte por Ivan Gutierrez (Practica No. 18)

Sintaxis del programa:

Modificacion 07/11/2018
Se agrego la funcion de limpiar con un boton para que al inicar el juego de nuevo al presionar play, los mensajes no se esten quedando donde originalmente salian antes.


from Tkinter import *
import time
import random
from tkMessageBox import *
import pygame

intento=object
nombre=object
num=object
vidas_disponibles=object
aux=0

def play():
    global nombre,num,vidas_disponibles

    mensaje_usuario.set(nombre.get()+" estoy pensando en un numero entre 1 y 5 " + "crees poder adivinarlo?")
    numeros=[1,2,3,4,5]
    num=random.choice(numeros)
    print num
    vidas_disponibles=random.choice(numeros)
    time.sleep(5)
    vidas_mensaje.set("La suerte dice que tienes: "+str(vidas_disponibles)+" oportunidades")


def Respuesta_usuario():
    global vidas_disponibles,num
    vidas_disponibles-=1

    if int(intento.get())<num:
        showinfo("Muy bajo","Tu estimacion es muy baja")
        vidas_mensaje.set("Te quedan: " + str(vidas_disponibles) + " oportunidades")

    elif int(intento.get())>num:
        showinfo("Muy alto","Tu estimacion es muy alta")
        vidas_mensaje.set("Te quedan: " + str(vidas_disponibles) + " oportunidades")

    if vidas_disponibles==0 or int(intento.get())==num:
        if num == int(intento.get()):
            time.sleep(5)
            showinfo("FELICIDADES!!", "Has ganado el juego")
        elif num != int(intento.get()):
            time.sleep(5)
            showinfo("Mala suerte", "Has perdido :(")


def limpiar():
    mensaje_usuario.set("")
    vidas_mensaje.set("")




juego=Tk()
juego.title("Adivina el numero")
juego.geometry("600x600")
titulo = Label(juego,text="Bienvenido",font=("PhrasticMedium", 30)).place(x=220,y=20)
nombre=StringVar()
usuario=Entry(juego,textvariable=nombre).place(x=195,y=100)
usuario_etiqueta=Label(juego,text="Ingresa tu nombre.").place(x=70,y=100)
mensaje_usuario=StringVar()
vidas_mensaje=StringVar()
vidas= Label(juego,textvariable=vidas_mensaje).place(x=125,y=220)

mensaje2 = Label(juego, text="Intenta adivinar...").place(x=150, y=280)
intento = StringVar()
respuesta_usuario = Entry(juego, textvariable=intento).place(x=260, y=280)

mensaje=Label(juego,textvariable=mensaje_usuario).place(x=125,y=160)
BotonPlay=Button(juego,text="Play",font=("PhrasticMedium", 14),fg="green",command=play).place(x=380,y=90)
BotonComprobar=Button(juego,text="Comprobar respuesta",font=("Arial",14),fg="red",command=Respuesta_usuario).place(x=210,y=350)
BotonReinicio=Button(juego,text="Limpiar",font=("Arial",11),command=limpiar).place(x=260,y=400)

pygame.init()


juego.mainloop()

Corrida en pantalla del programa:





Aplicaciones con interfaz grafica (Practica No. 14)

A lo largo de las siguientes entradas veremos un poco sobre las instrucciones usadas en las interfaces graficas dentro del entorno de python. Probablemente la mayoria de estas ya se hayan visto en otros programas previos,pero en este se iran explicando con mas detalle para un mayor entendimiento.

Programa 1: Uso de mensajes emergentes.


from Tkinter import *
from tkMessageBox import *


def pregunta():
    showerror("Pregunta", "Discuple, no hay preguntas disponibles")


def devolucion():
    if askyesno('Verificar', '¿Realmente quiere salir?'):
        showwarning('Si', 'No está implementado')
    else:
        showinfo('No', 'Salir fue cancelado')


Button(text='Salir', command=devolucion).pack(fill=X)
Button(text='Pregunta', command=pregunta).pack(fill=X)
mainloop()


Como vemos en el codigo del programa, importamos la libreria Tkinter al igual que tkMessageBox para el uso de los mensajes emergentes. Se crean dos metodos: pregunta y devolucion.

Dentro de pregunta se crea un showerror el cual nos arroja el simbolo de error en la ventana creada al igual que el mensaje que se vaya a especificar. Como ejemplo, "Pregunta" sera el titulo que tendra nuestra ventana, y "Disculpe, no hay preguntas disponibles" es el mensaje que tendra nuestra ventana al momento de implementarse dicho metodo.




En el metodo de devolucion, tenemos un askyesno que nos funciona para preguntas con los opciones que regresa una respuesta boleana. Si esta es verdadera, nos va a devolver un showwarning con el mensaje que esa opcion no esta impementada. En cambio, si se presiona en la opcion de negativa, nos regresara un showinfo con el mensaje de que salir ha sido cancelado.




Por ultimo creamos lo que es dos botones para implementar ambos metodos dentro de cada uno. El boton de salir implementa devolucion y el boton de pregunta implementa el metodo de pregunta.




Por ultimo, lo unico que hace es dar inicio al programa con la interfaz en mainloop()





domingo, 4 de noviembre de 2018

Depliegue de imagenes y sonido con hilos (Practica No. 13)

Sintaxis del programa:

from Tkinter import *  # crea la GUI
from PIL import Image, ImageTk
import pygame  # ayuda a reproducir audios mp3

import os  # permite manipular archivos
import random
import time
import threading

dir = os.path.dirname(__file__)  # lo utiliza para agregar una ruta
fotos = dir + "/imagenes/"  # guarda la direccion de la carpeta mas la carpeta donde esten
sonidos = dir + "/imagenes/"  # lo mismo en esta con los audios

play= 0
foto = object
sonido = object


def Mostrar_imagenes():
    global play,fotos,foto,etiqueta,nombre
    play=1
    while play==1:
        array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]  # crea un arreglo con el nombre de las imagenes
        animales = ["Squirel", "Kitty", "Raccoon", "Panda", "Cat", "Slot", "Husky", "Labrador", "Dolphin", "Pug", "Poodle"]

        imagen_seleccionada = random.choice(array)
        selectimagen = str(array.index(imagen_seleccionada) + 1)  # elige una imagen aleatoria
        selectnombre = animales[imagen_seleccionada - 1]
        figura = fotos + selectimagen + ".png"  # guardar la foto seleccionada

        "Como despliego la imagen en la ventana Tk"
        img = Image.open(figura)  # abre la imagen seleccionada
        img.thumbnail((300, 300), Image.ANTIALIAS)  # le da un tamano igual a todas las imagenes
        foto = ImageTk.PhotoImage(img)  # convierte la imagen a un archivo que tkinter pueda mostrar
        etiqueta= Label(root,image=foto).place(x=120, y=130)
        nombre = Label(root,text=selectnombre, font=("Harlow Solid Italic", 30), fg="purple").place(x=180, y=60)
        # para reproducir sonido
        sonido = sonidos + selectimagen + ".mp3"  # guarda el audio con el numero de foto que se selecciono
        print sonido
        pygame.mixer.init()  # inicia el reproductor
        pygame.mixer.music.load(sonido)  # carga el archivo de audio
        pygame.mixer.music.play()  # comienza a reproducir el audio
        time.sleep(3)

def detener():
    global play
    play=0

def Iniciar():
    hilo1=threading.Thread(target=Mostrar_imagenes)
    hilo1.start()


root = Tk()
root.geometry("500x500")
Titulo= Label(root,text="Imagenes mostradas al azar",font=("PhrasticMedium", 20)).place(x=100, y=10)

iniciar=StringVar()
iniciar.set("Iniciar")
Boton_Iniciar= Button(root,textvariable=iniciar,font=("Martina", 14),fg="green",command=Iniciar).place(x=90,y=450)
Detener=StringVar()
Detener.set("Detener")
Boton_parar=Button(root,textvariable=Detener,font=("Martina", 14),fg="red",command=detener).place(x=410,y=450)
pygame.init()
root.mainloop()


Corrida en pantalla de la interfaz




Programa practicando con Hilos 2 (Practica No.12)

Sintaxis del programa a analizar:


import threading
import time

play=1
stop=0


def hola_mundo(nombre):
    #global play,stop
    play = 1
    cont = 0
    while play == 1:
        print "Hola mundo ," + nombre
        time.sleep(1) #tiempo que detiene el hilo
        cont +=1
        #if stop==1:
            #break
        if cont == 10:
            play =2
    print "Termino la ejecucion"

if __name__=="__main__":
    hilos=threading.Thread(target=hola_mundo,args=("hilo 1",))
    hilos.start()
    #hilos.join() #detiene el thread o hilo hasta que termine su ejecucion
    #script normal nada se ejecuta en segundo plato
    #stop=input("Introdusca el valor de stop: ")
    #print "Hola desde el hilo principal"


Corridas en pantalla del programa:

1.La primera vez fue corrido con las instrucciones asi como estan en comentarios.


2.-La segunda vez, quitamos los comentarios de nuestro hilo.join() lo que permite que se ejecute todo el hilo antes de que nuestro hilo principal lanze el ultimo mensaje


jueves, 1 de noviembre de 2018

Uso de la libreria Threading (Practica No. 11)

Sintaxis del programa

import threading
import time


def hola_mundo(nombre):
    print "hola mundo, " + nombre
    time.sleep(13)

if __name__ == "__main__":
    hilos = threading.Thread(target=hola_mundo,args=("Mike",)) #se crea un objeto de tipo threading, llamamos con target al metodo hola mundo
    hilos.start()#inica la ejecucion del hilo
    hilos.join() #detiene el hilo hasta que termine
    print "Termino hilo 1"
    print "datos 1"
    n1=input()
    print "dato 2"
    n2=input()
    suma= n1 + n2
    print suma


Corrida en pantalla del programa



Programa con despliego de imagenes, audio y una etiqueta con el nombre de la imagen (Practica No. 10)

Sintaxis del programa


from Tkinter import * #crea la GUI
from PIL import Image,ImageTk
import pygame #ayuda a reproducir audios mp3

import os #permite manipular archivos
import random
import time


dir = os.path.dirname(__file__) #lo utiliza para agregar una ruta
fotos = dir + "/imagenes/" #guarda la direccion de la carpeta mas la carpeta donde esten
sonidos= dir + "/imagenes/" #lo mismo en esta con los audios
root = Tk()
root.geometry("500x500")
array = [1,2,3,4,5,6,7,8,9,10,11] #crea un arreglo con el nombre de las imagenes
animales=["Squirel","Kitty","Raccoon","Panda","Cat","Slot","Husky","Labrador","Dolphin","Pug","Poodle"]

imagen_seleccionada=random.choice(array)
selectimagen = str(array.index(imagen_seleccionada) + 1)#elige una imagen aleatoria
selectnombre=animales[imagen_seleccionada-1]
figura = fotos + selectimagen + ".png"  # guardar la foto seleccionada

"Como despliego la imagen en la ventana Tk"
img = Image.open(figura)#abre la imagen seleccionada
img.thumbnail((400, 400), Image.ANTIALIAS) #le da un tamano igual a todas las imagenes
foto = ImageTk.PhotoImage(img) #convierte la imagen a un archivo que tkinter pueda mostrar

#para reproducir sonido
sonido = sonidos + selectimagen + ".mp3" #guarda el audio con el numero de foto que se selecciono
print sonido
pygame.mixer.init() #inicia el reproductor
pygame.mixer.music.load(sonido) #carga el archivo de audio
pygame.mixer.music.play() #comienza a reproducir el audio
nombre = Label(root,text=selectnombre,font=("El Rio Lobo",30), fg="red").place(x=170,y=20)
etiqueta = Label(root, image=foto).place(x=90, y=90)

root.mainloop()

Corrida en pantalla del programa con el despliego de las imagenes.





Link de las imagenes y de los audios usados en el programa: https://drive.google.com/open?id=14hHw1K0D8SR_RqKZmUp34bZGw-sWIQb0