Practicas en clase (#21 al #29)

21- Mostrando imagenes al azar con sonido,etiquetas y botones mediante hilos


Codigo:


from Tkinter import * #para crear GUI
from PIL import Image, ImageTk #despliega imagenens
import os #libreria para dar ruta o path de una carpeta
import random
import pygame
import threading

root = Tk() #lo uso para la ventana de app de tkinter
root.geometry("400x400")

def main(aux):
     while aux == 1:
          global sonidos, fotos,eleccion_aleatoria
          dir = os.path.dirname(__file__) #lo utilizo para dar una ruta de donde estan las imagenes
          fotos = dir + "/imagenes/"
          sonidos = dir + "/sonidos8/"
          arreglo = [1,2,3,4,5,6,7,8] #crear un arreglo con el numero de las imagenes
          eleccion_aleatoria = str(arreglo.index(random.choice(arreglo))+1)
          hilo1 = threading.Thread(target=et)
          hilo2 = threading.Thread(target = repsonido)
          hilo3 = threading.Thread(target =img)
          hilo1.start()
          hilo2.start()
          hilo3.start()
          break

def repsonido():
     sonido = sonidos + eleccion_aleatoria + ".mp3"
     pygame.mixer.init()
     pygame.mixer.music.load(sonido)
     pygame.mixer.music.play()

def img():
     global tkimage
     figura = fotos + eleccion_aleatoria + ".png"

     img = Image.open(figura)
     tkimage = ImageTk.PhotoImage(img)
     etiqueta = Label(root, image=tkimage).place(x=100, y=200)

def et():
     lab = Label(text="                                      ", font=("Times New Roman", 20, "bold")).place(x=60,y=300)
     nombres = ["Cat","Dog", "House", "Pencil", "Worm", "3D", "Flower", "Car"]
     lab = Label(text = nombres[int(eleccion_aleatoria)-1], font=("Times New Roman",20)).place(x=10,y=110)


def fin():
     root.destroy()

b1 = Button(text = "Mostrar Imagenes", command = lambda: main(1)).place(x=10, y=50)
b2 = Button(text = "Terminar programa", command = fin).place(x=200,y=50)

root.mainloop()

22- Juego de los números con interfaz grafica(Juego de Alex)


Codigo:


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



23- Juego de piedra, papel o tijera (Por Carlos Olvera)

Enlace archivos:
https://drive.google.com/drive/folders/1oagprZJTu-3afTm4p9GR5XpSNZyArqUN






Codigo:





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=10, y=30)
 
label3 = Label(ventana, text='PIEDRA,PAPEL O TIJERA').place(x=0, y=0)
label2 = Label(ventana, text='un juego clasico y sencillo').place(x=0, y=0)
# boton para piedra
Piedra = Button(ventana, text='piedra', command=lambda: funcion(1)).place(x=50, y=100)
# boton para papel
Papel = Button(ventana, text='papel', command=lambda: funcion(2)).place(x=150, y=100)
# boton para tijera
Tijera1 = Button(ventana, text='tijera', command=lambda: funcion(3)).place(x=250, y=100)
 
ventana.mainloop()



24- Caja de dialogo


Codigo:


#!/usr/bin/python
# -*- coding: utf-8 -*-
# www.pythondiario.com
 
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()

25- Abrir Archivos


Codigo:


#!/usr/bin/python
# -*- coding: utf-8 -*-
# www.pythondiario.com
 
from Tkinter import *
from tkFileDialog import askopenfilename
 
 
def llamada():
    nombre = askopenfilename()
    print nombre
 
 
errmsg = 'Error!'
Button(text='Abrir archivo', command=llamada).pack(fill=X)
mainloop()

26- Ventana, etiqueta, boton


Codigo: 


#!/usr/bin/python
# -*- coding: utf-8 -*-
# www.pythondiario.com
 
from Tkinter import *
 
app = Tk()
app.title("Aplicacion grafica en python")
etiqueta = Label(app, text="Hola mundo!!!")
boton = Button(app, text="OK!!")
 
etiqueta.pack()
boton.pack()
app.mainloop()

27- Python File Multiple (comentado linea por linea)


Codigo:

# !/usr/bin/python
# -*- coding: utf-8 -*-
# www.pythondiario.com
import sys # importacion de la libreria sys
from Tkinter import * # importacion del modulo tkinter
def hacer_click(): # se crea una funcion
try: # funciona en caso de que se ingrese a la caja de texto un valor diferente a un numero
_valor = int(entrada_texto.get()) # captura lo que se ingrese a la caja de texto y lo guarda en _valor
_valor = _valor * 5 # multiplica por 5 lo capturado por la caja y lo guarda en _valor
etiqueta.config(text=_valor) # modifica la etiqueta por el valor resultante al multiplicar por 5
except ValueError: # es parte del try, y se utiliza en caso de que se ingrese un valor distinto a un numero
etiqueta.config(text="Introduce un numero!") # muestra una etiqueta y manda un mensaje
app = Tk() # se crea la ventana de la app
app.title("Mi segunda App Grafica") # se le da titulo a la ventana
# Ventana Principal
vp = Frame(app) # organiza y da formato a la ventana
vp.grid(column=0, row=0, padx=(50, 50), pady=(10, 10)) # posiciona los elementos graficos en nuestra ventana
vp.columnconfigure(0,
weight=1) # da un peso relativo al ancho y alto de todos los elementos que se pongan en la ventana
vp.rowconfigure(0, weight=1) # da un peso relativo al ancho y alto de todos los elementos que se pongan en la ventana
etiqueta = Label(vp, text="Valor") # se crea una etiqueta
etiqueta.grid(column=2, row=2, sticky=(W, E)) # se posiciona la etiqueta
boton = Button(vp, text="OK!", command=hacer_click) # se crea un boton que accionara la funcion hacer_click
boton.grid(column=1, row=1) # se posiciona el boton
valor = "" # se crea una variable
entrada_texto = Entry(vp, width=10, textvariable=valor) # se crea una caja de texto para ingresar datos
entrada_texto.grid(column=2, row=1) # se posiciona la caja de texto
app.mainloop() # ejecuta la ventana para que se pueda visualizar


28- Juego Encuentra la Pelota (Juego Propio sin Interfaz)


Codigo:



import random

print "Bienvenido al juego de Adivina en que vaso esta la pelota"
opcion = 0;
juego = ["Pelota","Vacio","Vacio"]

while opcion!=2:
    print "Escoga un vaso:\n 1.- Izquierda\n 2.- Centro\n 3.- Derecha"
    jugador = int(input("Opcion: "))
    maquina = random.choice(juego)

    if maquina == juego[jugador-1]:
        print "Lo sentimos, has perdido, suerte para la proxima"
    else:
        print "Felicidades, encontraste la pelota!!\nHas ganado!!!"
    opcion= input("Deseas seguir jugando? 1-Si/2-No:")



29- Interfaz Grafica con botones, cajas de texto y etiquetas


Codigo:


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

from Tkinter import *


def hacer_click():
    try:
        valor = int(entrada_texto.get())
        valor = valor * 5
        etiqueta.config(text=valor)

    except ValueError:
        etiqueta.config(text="Introduzca un valor")


def hacer_click2():
    try:
        valor2 = int(entrada_texto2.get())
        valor2 = valor2 * 10
        etiqueta2.config(text=valor2)

    except ValueError:
        etiqueta2.config(text="Introduzca un valor")


def hacer_click3():
    try:
        valor3 = int(entrada_texto3.get())
        valor3 = valor3 * 15
        etiqueta3.config(text=valor3)

    except ValueError:
        etiqueta3.config(text="Introduzca un valor")


app = Tk()  # marco de la aplicacion con el obj Tk
vp = Frame(app)  # usamos el objeto frame
'''ahora le damos formato a nuestra ventana, y para eso
vamos a utilizar el metodo grid(), el cual nos va a permitir
posicionar los elementos graficos en nuestra ventana.

otro parametro que utilizaremos sera el margen: padx = (50,50)
lo cual indica 50 pixeles del lado izquierdo y 50 pixeles 
del lado derecho

luego utilizamos pady = (10,10), que son 10 pixeles en la parte
superior y 10 pixeles en la parte inferior'''

vp.grid(column=0, row=0, padx=(50, 50), pady=(10, 10))

'''luego vamos a utilizar los metodos columnconfigure()
y rowconfigure() los cuales nos van a servir para dar un
peso relativo del ancho y el alto de todos los elementos
 que se pongan en la ventana'''

vp.columnconfigure(0, weight=1)
vp.rowconfigure(0, weight=1)

'''creamos una etiqueta llamada valor y la posicionamos
con el metodo grid()'''

etiqueta = Label(vp, text="valor")  # creo un objeto etiqueta
etiqueta.grid(column=100, row=1)

etiqueta2 = Label(vp, text="valor 2")
etiqueta2.grid(column=100, row=4)

etiqueta3 = Label(vp, text="valor 3")
etiqueta3.grid(column=100, row=6)

'''creamos un boton de OK y posicionamos con grid '''

boton = Button(vp, text="Multiplicar por 5", command=hacer_click)
boton.grid(column=1, row=1)

boton1 = Button(vp, text="Multiplicar por 10", command=hacer_click2)
boton1.grid(column=1, row=4)

boton2 = Button(vp, text="Multiplicar por 15", command=hacer_click3)
boton2.grid(column=1, row=6)

valor = ""
entrada_texto = Entry(vp, width=10, textvariable=valor)
entrada_texto.grid(column=2, row=1)

valor2 = ""
entrada_texto2 = Entry(vp, width=10, textvariable=valor2)
entrada_texto2.grid(column=2, row=4)

valor3 = ""
entrada_texto3 = Entry(vp, width=10, textvariable=valor3)
entrada_texto3.grid(column=2, row=6)

app.mainloop()  # es el metodo mainloop, lanza la ventana

Comentarios