Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- import pygame
- import os
- import sys
- import time
- from tkinter import *
- from tkinter import filedialog as fd
- class MusicPlayer:
- def __init__(self, root):
- self.root = root
- # Titulo
- self.root.title("Reproductor ACME")
- # Dimensiones y posicionamiento
- self.root.geometry("1000x200")
- self.root.resizable(True, True)
- self.root.minsize(950,170)
- # inicializo Pygame
- pygame.init()
- # inicializo PygameMixer
- pygame.mixer.init()
- # variable que almacena la pista de audio
- self.pista = StringVar()
- # Variable que almacena el estado del reproductor
- self.estado = StringVar()
- self.estado.set("HOLA")
- # creamos los frames para las pistas de audio con las etiquetas
- # de las canciones y del estado del reproductor
- frame_pistas = LabelFrame(
- self.root,
- text = "PISTA",
- font=("times new roman", 15, "bold"),
- bg="Gray",
- fg="LightSteelBlue1",
- bd=5,
- relief=GROOVE
- )
- frame_pistas.grid(row=0, column=0,sticky="nsew")
- # insertamos la etiqueta con la pista de la cancion
- cancion = Label(
- frame_pistas,
- textvariable = self.pista,
- width=50,
- justify='left',
- height=2,
- font=("times new roman", 12, "bold"),
- bg="gold",
- fg="dodger blue",
- )
- cancion.grid(row=0,column=0, padx=10, pady=5)
- # insertamos la etiqueta con el estado
- frame_estado = Label(
- frame_pistas,
- width=15,
- height=2,
- textvariable = self.estado,
- font=("times new roman", 12, "bold"),
- bg="gold",
- fg="dodger blue",
- )
- frame_estado.grid(row=0, column=1, padx=10, pady=5)
- # creamos los frames para los botones del reproductor
- frame_boton = LabelFrame(
- self.root,
- text = "Panel de Control",
- font=("times new roman", 15, "bold"),
- bg="Gray",
- fg="LightSteelBlue1",
- bd=5,
- relief=GROOVE
- )
- frame_boton.grid(row=1, column=0,sticky="nsew")
- # boton play
- boton = Button(
- frame_boton,
- text = "\u25B6",
- command= self.playsong,
- width=5,
- height=1,
- font=("times new roman", 16, "bold"),
- bg="White",
- fg="LightSteelBlue3",
- )
- boton.grid(row=0,column=0,padx=10, pady=5)
- # boton pause
- boton = Button(
- frame_boton,
- text = "\u23F8",
- command= self.pausesong,
- width=5,
- height=1,
- font=("times new roman", 16, "bold"),
- bg="White",
- fg="LightSteelBlue3",
- )
- boton.grid(row=0,column=1,padx=10, pady=5)
- # boton stop
- boton = Button(
- frame_boton,
- text = "\u23F9",
- command= self.stopsong,
- width=5,
- height=1,
- font=("times new roman", 16, "bold"),
- bg="White",
- fg="LightSteelBlue3",
- )
- boton.grid(row=0,column=2,padx=10, pady=5)
- # boton para cargar canciones
- boton = Button(
- frame_boton,
- text = "Lista de canciones",
- command= self.cargar,
- width=20,
- height=1,
- font=("times new roman", 16, "bold"),
- bg="White",
- fg="LightSteelBlue3",
- )
- boton.grid(row=0,column=3,padx=10, pady=5)
- # creamos los frames para la lista de las canciones
- frame_cancion = LabelFrame(
- self.root,
- text = "Lista de canciones",
- font=("times new roman", 15, "bold"),
- bg="Gray",
- fg="white",
- bd=5,
- relief=GROOVE
- )
- frame_cancion.grid(row=0, column=1, rowspan=2, sticky="nsew")
- self.root.columnconfigure(1,weight=1)
- self.root.rowconfigure(0,weight=1)
- self.root.rowconfigure(0,weight=1)
- # insertamos las barras de scroll
- scroll_y = Scrollbar(frame_cancion, orient=VERTICAL)
- scroll_x = Scrollbar(frame_cancion, orient=HORIZONTAL)
- # insertamos un listbox con la lista de canciones en el frame de
- # canciones
- self.playlist = Listbox(
- frame_cancion,
- yscrollcommand=scroll_y.set,
- xscrollcommand=scroll_x.set,
- selectbackground="gold",
- selectmode=SINGLE,
- font=("times new roman", 12, "bold"),
- bg="gray",
- fg="white",
- bd=5,
- relief=GROOVE
- )
- # aplico los scroll al listbox
- scroll_y.pack(side=RIGHT,fill=Y)
- scroll_y.config(command=self.playlist.yview)
- scroll_x.pack(side=BOTTOM,fill=X)
- scroll_x.config(command=self.playlist.xview)
- self.playlist.pack(expand=True, fill=BOTH)
- def cargar(self):
- # elegimos el directorio
- ruta = fd.askdirectory()
- self.playlist.delete(0,END)
- # insertamos las canciones en la playlist
- for carpeta_actual, lista_carpetas,lista_archivos in os.walk(ruta):
- for archivo in lista_archivos:
- cancion = os.path.join(carpeta_actual,archivo)
- self.playlist.insert(END,cancion)
- def playsong(self):
- """reproduce la canción elegida"""
- if self.estado.get() == "Pausado":
- self.estado.set("Reproduciendo")
- pygame.mixer.music.unpause()
- else:
- # muestro la canción
- titulo = self.playlist.get(ACTIVE)
- self.pista.set(os.path.basename(titulo))
- # muestro el estado
- self.estado.set("Reproduciendo")
- # cargo lacanción elegida
- pygame.mixer.music.load(titulo)
- pygame.mixer.music.play()
- def pausesong(self):
- """Pausa la reproducción"""
- # Cambio el estado
- self.estado.set("Pausado")
- # pauso la canción
- pygame.mixer.music.pause()
- def unpausesong(self):
- """Vuelve a reproducir"""
- # Cambio el estado
- self.estado.set("Reproduciendo")
- # saco de pausa a la canción
- pygame.mixer.music.unpause()
- def stopsong(self):
- """Detiene la reproducción"""
- # Cambio el estado
- self.estado.set("Detenido")
- # detengo la canción
- pygame.mixer.music.stop()
- if __name__ == "__main__":
- root = Tk()
- reproductor = MusicPlayer(root)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement