domingo, 25 de noviembre de 2018

Figuras básicas 3D en python

Los siguientes programas fueron realizados por un compañero
http://eduardommm.blogspot.com/search/label/Graficacion

Programa 1: Gráficas
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
 

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

fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')
#Coordenadas
xpos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
ypos = [10, 1, 1, 1, 1, 6, 2, 1, 7, 2, 3, 5, 1, 3, 2]
zpos = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

dx = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] #Ancho
ldy  = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] #largo
ldz = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] #Altura

ax1.bar3d(xpos, ypos, zpos, dx, ldy, ldz, color='blue')
plt.show() 


Interfaz:


2. Cubo básico
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()

Interfaz:



3. Pirámide
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()

Interfaz:


4. Cubo a colores
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()

Interfaz:

4 Programas de interfaz extra

1. Programa que permite mostrar la ruta de un archivo.

from Tkinter import StringVar, Tk

from Programa1 import *
import ttk
import tkMessageBox
import tkFileDialog


class ventana():
    ruta = object

    def __init__(self):
        pass

    def load_interface(self):
        self.ventana = Tk()
        self.ventana.title("Visualizar uta de Fichero")
        self.ventana.geometry("600x200")
        self.var = StringVar()
        self.caja = ttk.Entry(self.ventana, textvariable=self.var, font=("Arial", 12, "bold"), width=40)
        self.caja.place(x=50, y=50)
        self.btn1 = ttk.Button(self.ventana, text="...", command=self.comando)
        self.btn1.place(x=425, y=49)
        self.ventana.mainloop()

    def comando(self):
        self.ruta = tkFileDialog.askopenfilename()
        self.var.set(str(self.ruta))


if __name__ == "__main__":
    ventana = ventana()
    ventana.load_interface()


2. Programa de peliculas, agregar informacion a un combobox.


from tkinter import *
import ttk


class ventana():
    valores = []
    pelicula = object

    def __init__(self):
        pass

    def load_interface(self):
        self.ventana = Tk()
        self.ventana.geometry("500x500")
        self.ventana.title("Alondra Salazar")
        self.E1 = Label(self.ventana, text="Introduce el nombre de la pelicula").place(x=10, y=10)
        self.pelicula = StringVar()
        self.C1 = Entry(self.ventana, text=self.pelicula, width=30).place(x=10, y=40)
        self.E2 = Label(self.ventana, text="Peliculas").place(x=300, y=10)
        self.dropbox = ttk.Combobox(self.ventana, values=self.valores, state="readonly")
        self.dropbox.place(x=300, y=40)
        self.bt1 = ttk.Button(self.ventana, text="Agregar", command=self.agregar).place(x=65, y=63)
        self.ventana.mainloop()

    def agregar(self):
        self.valores.append(self.pelicula.get())
        self.dropbox["values"] = self.valores


if __name__ == "__main__":
    ventana = ventana()
    ventana.load_interface()


3.Generador de números aleatorios
# -*- coding: utf-8 -*-
from tkinter import *
import ttk
import random
import tkMessageBox
 
 
class ventana():
 
    valores=[]
    numero_generado=object
 
    def __init__(self):
        self.generatelist()
 
    def load_interface(self):
        self.ventana=Tk()
        self.ventana.geometry("300x150")
        self.ventana.title("Generador de Numeros Aleatorios")
 
        self.E1=Label(self.ventana,text="Rango Menor").place(x=10,y=10)
        self.E2= Label(self.ventana, text="Rango Mayor").place(x=10, y=50)
 
        self.spin1=Spinbox(self.ventana,values=self.valores, font=("Arial",12))
        self.spin1.place(x=100,y=10)
        self.spin2 = Spinbox(self.ventana, values=self.valores,font=("Arial",12))
        self.spin2.place(x=100, y=50)
 
        self.ET3=Label(self.ventana,text="Numero Generado: ").place(x=10,y=90)
        self.numero_generado=StringVar()
        self.C1=Entry(self.ventana,textvariable=self.numero_generado)
        self.C1.place(x=120,y=91)
 
        self.BT1=ttk.Button(self.ventana,text="Generar",command=self.generate).place(x=145,y=120)
 
        self.ventana.mainloop()
 
    def generate(self):
        try:
            self.numero_generado.set(random.randrange(int(self.spin1.get()),int(self.spin2.get())))
        except ValueError:
            if int(self.spin1.get())==int(self.spin2.get()):
                tkMessageBox.showinfo("Error","Los numeros del rango de valores son iguales")
            elif int(self.spin1.get())>int(self.spin2.get()):
                tkMessageBox.showinfo("Error","El rango menor debe ser mas pequeño que el rango mayor")
    def generatelist(self):
        for i in range(1,101,1):
            self.valores.append(i)
        return  self.valores
 
 
 
if __name__=="__main__":
    v=ventana()
    v.load_interface()
4.Envia saludos
#!/usr/bin/python
# -*- coding: utf-8 -*-
from tkinter import *
import ttk
import random
import tkMessageBox


class ventana():
    nombre = object

    def __init__(self):
        pass

    def load_interface(self):
        self.ventana = Tk()
        self.ventana.geometry("340x80+500+200")
        self.ventana.title("Saludos")
        self.E1 = Label(self.ventana, text="Ingrese un nombre para mandar saludos: ", font=("Arial", 12, "bold")).place(
            x=10, y=10)
        self.nombre = StringVar()
        self.C1 = Entry(self.ventana, textvariable=self.nombre, width=40).place(x=10, y=35)
        self.B1 = ttk.Button(self.ventana, text="Saludar!", command=self.saludo).place(x=255, y=32)
        self.ventana.mainloop()

    def saludo(self):
        tkMessageBox.showinfo("Hola", "Hola " + self.nombre.get())


if __name__ == "__main__":
    v = ventana()
    v.load_interface()

viernes, 23 de noviembre de 2018

Practicas (Programas)

1. Verificar que seas mayor de edad
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Ejemplo de Edad con Spinbox.-
# Aportación de: Valeria Esmeralda Vargas Requena
import sys
from Tkinter import *
import tkMessageBox


def CalcularEdad():  # definimos la funcion edad
    Valor = int(CajaEdad.get())  # obtenemos
    # el año de nacimiento
    if (2018 - Valor >= 18):  # si a restarle el año actual es mayor o igual a 18
        tkMessageBox.showinfo("Felicidades", "Eres Mayor de Edad!")  # es mayor de edad
    elif (2018 - Valor <= 5):  # si la edad es menor de 5 años
        tkMessageBox.showinfo("Eehhh?", "Como puedes tener menos de 5  y usar este programa")
    elif ((2018 - Valor) > 8 and (2018 - Valor) < 18):  # si la edad es entre os 8 y 15
        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="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()
Interfaz:


2. Punto de venta
# -*- coding: utf-8 -*-
# Programa punto de venta, cuenta billetes, monedas etc...
# Aportación de: Jose Manuel Sanchez Izaguirre
from Tkinter import *
import tkMessageBox


# definimos una funcion para obtener todos los valores de las cajas
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  # hacemosla sumatoria
        tkMessageBox.showinfo("El resultado es", _e10)  # imprimimos el mensaje
    except ValueError:  # si existe un error imprime el siguiente mensaje
        etiqueta.config(text="Introduce un numero entero")


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

v.mainloop() 
Interfaz:


3.Consulta del signo zodiacal.
# -*- coding: utf-8 -*-
#Aportacion de Cecilia Abigal Cantu Alcala
#programa que saca el signo zodiacal
 
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)
var.set("Enero")  # initial value
ver = 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()) #obtenemos el mes de nacimiento
    day= int(ver.get()) #obtenemos el dia de nacimiento
    #comparamos de acuerdo a diferentes tipos de reglas para definir el signo zodiacal
    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()
Interfaz:
4. Programa para calcular IMC
# -*- coding: utf-8 -*-
#Aportacion de Cecilia Abigal Cantu Alcala
#programa que calcula IMC
 
# -*- coding: utf-8 -*-import sys
import Tkinter
from Tkinter import *
import tkMessageBox
 
def imc(): #creamos la funcion para definir el indice de masa corporal
    num1 = int(entrada_peso.get()) #obtenemos el peso
    num2 = float(entrada_altura.get()) #obtenemos la altura
    imc = (num1 / (num2*num2)) #obtenemos el calculo de imc
 
    if imc == 0 or imc < 18: 
        tkMessageBox.showinfo("Resultado", "Peso bajo. Necesario valorar signos de desnutrición")
 
    #realizamos las comparaciones pertinentes
    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)
 
#altura
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()

Interfaz:

5. Renta de películas
# -*- 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!!!

from tkinter import Label, Entry, Button, Tk, Frame, W, N, S, E, END, HORIZONTAL, Spinbox

from ttk import Combobox, Separator
from tkMessageBox import askyesno, showinfo, showerror;


# 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")
    # Una pequeña "excepcion" por si el campo de texto para ingresar la pelicula esta vacio
    else:
        if (Classes.get() == ""):
            # otra pequeña "excepcion" por si la clasificación de la pelicula no tiene seleccionada una clasificación
            showerror("What Movie it is?", "Por favor selecciona una clasificación!")
        else:
            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 añadido: \"" + Movie + "\" A la lista de Peliculas")
            else:
                showinfo("Guess No", "La Pelicula: " + Movie + " No sera añadida")


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()'
    else:
        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 = ""
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()

Interfaz:

6. Calcula intereses generados
# -*- coding: utf-8 -*-

import sys
from Tkinter import *
import tkMessageBox


def interes():
    # obtenemos los valores de estos campos
    v1 = int(ent1.get())
    v2 = int(ent2.get())
    v3 = int(ent3.get())
    # hacemos el calculo del interes generado
    r = v1 * v2 / 100
    g = (r * v3)
    f = g + v1
    # damos el resultado final
    tkMessageBox.showinfo("Interes Total", "Cuando pasen " + str(v3) + " años, con un interes de " + str(
        v2) + " usted habrá generado " + str(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=val2)
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()

Interfaz:



7. Encriptación 
from Tkinter import *

# Jesus Eduardo Martinez Hinojosa

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

# Clave
numclave = 1


# Funciones.
def boton1():
    # Cifrado Cesar
    TAM_MAX_CLAVE = 26  # defino el numero de letras del abecedario, en este caso el estadounidense

    def obtenerModo():
        modo = "e"  # defino el modo de encriptacion
        return modo

    def obtenerMensaje():
        mensaje = text.get("0.0", END)  # obtengo el contenido de la caja de texto
        return mensaje

    def obtenerClave():
        global numclave  # obtengo la clave, el numero de letras a recorrer el mensaje
        clave = numclave
        return clave

    def obtenerMensajeTraducido(modo, mensaje, clave):
        if modo[0] == 'd':  # si el modo es igual a encriptar se resta un valor a la clave
            clave = -clave
        traduccion = ''  # y la traduccion se resetea a caracteres en blanco
        for simbolo in mensaje:  # El for se repetira el numero de veces tantos caracteres tenga el mensaje encriptado
            if simbolo.isalpha():  # si el caracter es alfanumerico
                num = ord(simbolo)  # obtenemos el numero ascii
                num += clave  # y lo sumamos la clave para obtener el caracter siquiente
                if simbolo.isupper():  # si el simbolo es Mayuscula
                    if num > ord('Z'):  # si el numero ascci es mayor a la z
                        num -= 26  # Le restamos 26 para tener el caracter A
                    elif num < ord('A'):  # si el numero ascii es menor a la A
                        num += 26  # sumamos 26 para obtener la Z
                        # Se aplica el mismo procedimiento para las minusculas
                elif simbolo.islower():
                    if num > ord('z'):
                        num -= 26
                    elif num < ord('a'):
                        num += 26
                # sin importar la condicion se agrega el numero ascii convertido a caracter a la variable traduccion
                traduccion += chr(num)
            else:  # De lo contrario solo se agregara el simbolo a traduccion
                traduccion += simbolo
        return traduccion

    modo = obtenerModo()  # obtenemos el modo
    mensaje = obtenerMensaje()  # obtenemos el mensaje
    if modo[0] != 'b':  # si el modo es diferente de b
        clave = obtenerClave()  # obtenemos la clave
        texto = (obtenerMensajeTraducido(modo, mensaje, clave))  # conseguimos el texto escrito
        text.delete("0.0", END)  # borramos e tecto actual
        text.insert("0.0", texto)  # agregamos el nuevo texto
        informe1.config(text="Texto Encriptado")  # mostramos el texto "texto encriptado"
    else:
        for clave in range(1, TAM_MAX_CLAVE + 1):  # si desencriptamos hacemos el proceso inverso
            print(clave, obtenerMensajeTraducido('desencriptar', mensaje, clave))


# Hacemos el mismo proceso anterior pero e proceso inverso
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))


# definimos las opciones del menu
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("", menu_activacion)

# donde mantener el enfoque.

ventana.mainloop()
Interfaz:

8. Interfaz usando grid
# Aportacion.- Luis Angel Alonso Rojas
# programa que hace la interfaz
# programa que te pide tus datos basicos
# Luis Angel Alonso Rojas#15260607

from Tkinter import *

root = Tk()
root.title('formulario 1')
# row 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)
# row 2 : the
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)
# row 3 :
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)
# row 4 :
endfinish = Button(root, text="finalizar", relief=FLAT)
endfinish.grid(row=4, column=2)
root.mainloop()

Interfaz:




9. Mostrar y ocultar una imagen
import Tkinter as tk
from Tkinter import *

ventana = Tk()
ventana.geometry('400x400')
ventana.config(bg="black")
ventana.title("Mostrando y ocultando un botón con una imagen")

def btn_hide():
    if b1.winfo_ismapped():
        b1.place_forget()  # Oculta la imagen
        b2.configure(text="Mostrar carita", width=15)  # cambio el texto del boton
    else:
        b1.place(x=70, y=50)  # muestra la imagen
        b2.configure(text="Ocultar carita", width=15)  # cambio el texto del boton


imgBoton = PhotoImage(file="2.png")
b1 = tk.Button(ventana, text="Botón 1", image=imgBoton, fg="black", width=200)
b1.place(x=90, y=50)
b2 = Button(ventana, text="Ocultar Imagen", command=btn_hide, fg="black", width=15)
b2.place(x=130, y=280)

ventana.mainloop()


10. Calendario
#!/usr/bin/python
# -*- coding: utf-8 -*-

# Aportacion.- Martin Cruz Alvarez
# programa.- de Calendario

import calendar
import Tkinter as tk
import datetime

# Obtenemos los valores del año y mes a
ano = datetime.date.today().year
mes = datetime.date.today().month


def writeCalendar(ano, mes):
    # Asignamos el año y mes al calendario
    str1 = calendar.month(ano, mes)
    label1.configure(text=str1)


def mesAnterior():
    global mes, ano
    mes -= 1
    print mes
    print ano
    if mes == 0:  # si el mes es 0
        mes = 12  # el mes se resetea a 12
        ano -= 1  # y se le resta un año a a fecha
    writeCalendar(ano, mes)


def mesSiguiente():
    global mes, ano
    mes += 1
    if mes == 13:  # si el mes 13
        mes = 1  # se resetea el mes a 1
        ano += 1  # y se suma un año a la fecha
    writeCalendar(ano, mes)


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

# Lo posicionamos en un label
label1 = tk.Label(root, text="", font=('courier', 40, 'bold'), bg='white', 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)
print ano, mes
writeCalendar(ano, mes)

# ejecutamos el evento loop
root.mainloop()
Interfaz:

miércoles, 14 de noviembre de 2018

Juego Adivina el numeor V2

CÓDIGO
       


from Tkinter import *
from random import *
import random
import tkMessageBox

intentos =0
aux=0

def inicio_jugar():

    arr = [1, 2, 3, 4, 5]
    global intentos
    intentos = random.choice(arr)
    global num
    num = randint(1, 5)

    nom=entrada1.get()

    et1=Label(contenedor,text="Hola "+nom+" estoy pensando en un numero entre 1 y 5, crees poder adivinarlo?",font=("Times New Roman",15)).place(x=0,y=147)
    et2=Label(contenedor,text="La suerte va a decir el numero de intentos que tienes",font=("Times New Roman",15)).place(x=0,y=207)

    et3=Label(contenedor,text="Tienes "+str(intentos)+" intentos",font=("Times New Roman",15)).place(x=90,y=267)
    parte_2()

def parte_2():
    et4 = Label(contenedor, text="Intenta adivinar: ", font=("Times New Roman", 15)).place(x=90, y=337)
    global entrada2
    entrada2= StringVar()
    objentrada2 = Entry(contenedor, textvariable=entrada2).place(x=242, y=342)

    b2 = StringVar()
    b2.set("Verificar respuesta")
    bgame2 = Button(contenedor, textvariable=b2, command=verificar).place(x=380, y=340)

def verificar():
    global aux
    while auxnum:
            tkMessageBox.showinfo("Alerta", "Tu estimacion es muy alta")
            aux+=1
            break

        if num==est:
            accion = tkMessageBox.askyesno("Atencion",
                                           "Haz ganado el juego\n Quieres volver a jugar?")
            if accion == False:
                ventana.destroy()
                break
            else:
                aux = 0
                inicio_jugar()
                break

    if intentos==aux:
        accion = tkMessageBox.askyesno("Atencion","Haz perdido el juego\n Quieres volver a jugar?")
        if accion == False:
            ventana.destroy()
        else:
            aux = 0
            inicio_jugar()

ventana=Tk()
ventana.config(bg="gray")
contenedor=Frame(ventana,width=650,height=650)
contenedor.pack()
t1=Label(contenedor,text="Bienvenido al juego adivina el numero",font=("Times New Roman",15)).place(x=90,y=25)
t2=Label(contenedor,text="Ingresa tu nombre: ",font=("Times New Roman",15)).place(x=90,y=87)


b1=StringVar()
b1.set("Iniciar juego")
bgame=Button(contenedor,textvariable=b1,command=inicio_jugar).place(x=407,y=87)
entrada1=StringVar()
objentrada=Entry(contenedor,textvariable=entrada1).place(x=240,y=90)


ventana.mainloop()
    
 

Juego piedra, papel o tijera (Interfaz)

CÓDIGO
       
#!/usr/bin/python
# -*- coding: utf-8 -*-
from tkinter import *
import Imagenes
import random
import tkMessageBox
class app():
    valores = ["Piedra", "Papel", "Tijera"]
    def __init__(self):
        self.ventana=Tk()
        self.ventana.geometry("500x500")
        self.ventana.title("Piedra/Papel/Tijera")
        self.Titulo=Label(self.ventana,text="Piedra Papel o Tijera", font=("Arial",12,"bold"))
        self.Titulo.pack()
        self.load()
        self.ventana.mainloop()
    def load(self):
        self.ET1=Label(self.ventana,text="Selecciona una opcion: ",font=("Arial",10)).place(x=30,y=30)
        self.IPiedra=Imagenes.get_imagen("Piedra.png",60,60)
        self.Boton1=Button(self.ventana,image=self.IPiedra,relief=FLAT, bd=0, command=lambda: self.function(0)).place(x=30,y=60)
        self.IPapel = Imagenes.get_imagen("Papel.png", 60, 60)
        self.Boton2 = Button(self.ventana, image=self.IPapel, relief=FLAT, bd=0,command=lambda: self.function(1)).place(x=100, y=60)
        self.ITijera = Imagenes.get_imagen("Tijera.png", 60, 60)
        self.Boton3 = Button(self.ventana, image=self.ITijera, relief=FLAT, bd=0,command=lambda: self.function(2)).place(x=170, y=60)
    def function(self,value):
        self.usuario=self.valores[value]
        self.cpu=random.choice(self.valores)
        self.ImagenUser=Imagenes.get_imagen(self.usuario+".png",120,120)
        self.ImagenCpu = Imagenes.get_imagen(self.cpu + ".png", 120, 120)
        self.LUser = Label(self.ventana, image=self.ImagenUser)
        self.LUser.place(x=60, y=200)
        self.LCPU = Label(self.ventana, image=self.ImagenCpu)
        self.LCPU.place(x=350, y=200)
        self.ET2=Label(self.ventana,text="Los resultados son: ",font=("Arial",10))
        self.ET2.place(x=30,y=150)
        self.ET3=Label(self.ventana,text="VS",font=("Castellar",50,"bold"))
        self.ET3.place(x=200,y=250)
        self.opcion=object
        print self.cpu, " vs ",self.usuario
        if self.cpu == self.usuario:
            self.opcion=tkMessageBox.askyesno("Empate","Haz Empatado con la maquina \n ¿Deseas competir de nuevo?")
        elif (self.cpu == "Piedra" and self.usuario == "Papel") or (self.cpu == "Tijera" and self.usuario == "Piedra") or (self.cpu == "Papel" and self.usuario == "Tijera"):
            self.opcion = tkMessageBox.askyesno("Ganador", "En hora buena haz ganado!!!\n ¿Deseas competir de nuevo?")
        else:
            self.opcion = tkMessageBox.askyesno("Perdedor", "La maquina te ha ganado \n ¿Deseas competir de nuevo?")
        if self.opcion:
            self.limpiar()
        else:
            tkMessageBox.showinfo("Adios","Gracias por jugar, hasta la proxima bye,bye")
            self.ventana.destroy()
    def limpiar(self):
        self.ET2.config(text="")
        self.ET3.config(text="")
        self.ImageBlanck=Imagenes.get_imagen("Blanck.png",120,120)
        self.LUser.config(image=self.ImageBlanck)
        self.LCPU.config(image=self.ImageBlanck)
app=app()
Interfaz