Archivo de Python:
Ejecución del programa:
Nota: Se recomienda descargar el archivo desde el link proporcionado y ejecutarlo desde un IDE como pycharm para verificar los sonidos que se escuchan al momento de ejecutar el programa
Código:
from Tkinter import * #para crear la GUI from PIL import Image, ImageTk #despliegue de imagenes import os #para dar una ruta path de una carpeta o directorio import random #para seleccionar y dar numeros aleatorios import pygame import threading root = Tk() #lo uso para la ventana de app de tkinter def main(aux): while aux == 1: global fotos, Csonido, eleccion_aleatoria, contenedor dir = os.path.dirname(__file__) #lo utilizo para dar una ruta de donde estan mis imagenes fotos = dir + "/Imagenes/" Csonido=dir + "/Sonidos8/" #establece la ruta hacia los sonidos arreglo = [1,2,3,4,5,6,7,8] #crear un areglo con el numero de las imagenes eleccion_aleatoria = str(arreglo.index(random.choice(arreglo))+1) #se toma un elemento del array al azar y se hace string hilo1 = threading.Thread(target=et) hilo2 = threading.Thread(target = reproducirsonido) hilo3 = threading.Thread(target =img) hilo1.start() hilo2.start() hilo3.start() break def reproducirsonido(): sonido = Csonido + eleccion_aleatoria + ".mp3" pygame.mixer.init() pygame.mixer.music.load(sonido) pygame.mixer.music.play() def img(): global tkimage figura = fotos + eleccion_aleatoria + ".png" #asignas la extension png a al imagen #Como despliego el archivo en la ventana tk img = Image.open(figura) #va a la ruta de la imagen y la abre tkimage = ImageTk.PhotoImage(img) #despliega la imagen etiqueta = Label(root,image=tkimage).place(x=300,y=300) #la imagen se pone en una etiqueta def et(): nombre_img=Label(text = " ",font =("Times New Roman",20,"bold")).place(x = 60, y = 300) imagenes=["Cat","Dog","House","Pencil","Holy Hand Granade","3D","Flower","Car"] nombre_img = Label(text = imagenes [int (eleccion_aleatoria)-1],font=("Times New Roman",20,"bold")).place(x=60,y=300) def fin(): root.destroy() b1 = Button(text = "Mostrar Imagenes", command = lambda: main(1)).place(x=100, y=100) b2 = Button(text = "Terminar programa", command = fin).place(x=200,y=200) root.geometry("500x500") root.mainloop()
Pues solo un comentario observacion.
ResponderEliminarNo dudo que el programa cumpla su función sin embargo:
1.No es recomendable meter los hilos dentro de un ciclo repetitivo debido a la invocación repetitiva de un mismo hilo, lo cual genera errores en el compilador.
2.Realmente el programa no necesitaba de 3 hilos, solo 1 correspondiente a realizar las 3 acciones:
-Muestra de imagenes
-Reproduccion de sonido
-Cambio de texto
Esto debido a que si alguno de ellos se adelata al poner algo en pantalla seria incongruente ver la imagen de un carro con la etiqueta perro.
3.Veo utilizan el while, con la intencion de mostrar cada uno de estos de forma automatica, lo cual no pasa, es mas el while dado su estructura expuesta en el programa es completamente innecesario, debido al break al final de la instrucción, dicho esto sale igual quitarlo por que dara el mismo resultado.