Advertisement
teslariu

music player con pygame

Oct 4th, 2023
1,087
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.65 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. import pygame
  5. import os
  6. import sys
  7. import time
  8. from tkinter import *
  9. from tkinter import filedialog as fd
  10.  
  11.  
  12. class MusicPlayer:
  13.    
  14.     def __init__(self, root):
  15.         self.root = root
  16.        
  17.         # Titulo
  18.         self.root.title("Reproductor ACME")
  19.        
  20.         # Dimensiones y posicionamiento
  21.         self.root.geometry("1000x200")
  22.         self.root.resizable(True, True)
  23.         self.root.minsize(950,170)
  24.        
  25.         # inicializo Pygame
  26.         pygame.init()
  27.        
  28.         # inicializo PygameMixer
  29.         pygame.mixer.init()
  30.        
  31.         # variable que almacena la pista de audio
  32.         self.pista = StringVar()
  33.        
  34.         # Variable que almacena el estado del reproductor
  35.         self.estado = StringVar()
  36.         self.estado.set("HOLA")
  37.        
  38.         # creamos los frames para las pistas de audio con las etiquetas
  39.         # de las canciones y del estado del reproductor
  40.         frame_pistas = LabelFrame(
  41.             self.root,
  42.             text = "PISTA",
  43.             font=("times new roman", 15, "bold"),
  44.             bg="Gray",
  45.             fg="LightSteelBlue1",
  46.             bd=5,
  47.             relief=GROOVE
  48.         )
  49.         frame_pistas.grid(row=0, column=0,sticky="nsew")
  50.        
  51.         # insertamos la etiqueta con la pista de la cancion
  52.         cancion = Label(
  53.             frame_pistas,
  54.             textvariable = self.pista,
  55.             width=50,
  56.             justify='left',
  57.             height=2,
  58.             font=("times new roman", 12, "bold"),
  59.             bg="gold",
  60.             fg="dodger blue",
  61.             )
  62.         cancion.grid(row=0,column=0, padx=10, pady=5)
  63.        
  64.        
  65.         # insertamos la etiqueta con el estado
  66.         frame_estado = Label(
  67.             frame_pistas,
  68.             width=15,
  69.             height=2,
  70.             textvariable = self.estado,
  71.             font=("times new roman", 12, "bold"),
  72.             bg="gold",
  73.             fg="dodger blue",
  74.         )
  75.         frame_estado.grid(row=0, column=1, padx=10, pady=5)
  76.        
  77.        
  78.         # creamos los frames para los botones del reproductor
  79.         frame_boton = LabelFrame(
  80.             self.root,
  81.             text = "Panel de Control",
  82.             font=("times new roman", 15, "bold"),
  83.             bg="Gray",
  84.             fg="LightSteelBlue1",
  85.             bd=5,
  86.             relief=GROOVE
  87.         )
  88.         frame_boton.grid(row=1, column=0,sticky="nsew")
  89.        
  90.         # boton play
  91.         boton = Button(
  92.             frame_boton,
  93.             text = "\u25B6",
  94.             command= self.playsong,
  95.             width=5,
  96.             height=1,
  97.             font=("times new roman", 16, "bold"),
  98.             bg="White",
  99.             fg="LightSteelBlue3",
  100.         )
  101.         boton.grid(row=0,column=0,padx=10, pady=5)
  102.        
  103.        
  104.         # boton pause
  105.         boton = Button(
  106.             frame_boton,
  107.             text = "\u23F8",
  108.             command= self.pausesong,
  109.             width=5,
  110.             height=1,
  111.             font=("times new roman", 16, "bold"),
  112.             bg="White",
  113.             fg="LightSteelBlue3",
  114.         )
  115.         boton.grid(row=0,column=1,padx=10, pady=5)
  116.        
  117.        
  118.         # boton stop
  119.         boton = Button(
  120.             frame_boton,
  121.             text = "\u23F9",
  122.             command= self.stopsong,
  123.             width=5,
  124.             height=1,
  125.             font=("times new roman", 16, "bold"),
  126.             bg="White",
  127.             fg="LightSteelBlue3",
  128.         )
  129.         boton.grid(row=0,column=2,padx=10, pady=5)
  130.        
  131.        
  132.         # boton para cargar  canciones
  133.         boton = Button(
  134.             frame_boton,
  135.             text = "Lista de canciones",
  136.             command= self.cargar,
  137.             width=20,
  138.             height=1,
  139.             font=("times new roman", 16, "bold"),
  140.             bg="White",
  141.             fg="LightSteelBlue3",
  142.         )
  143.         boton.grid(row=0,column=3,padx=10, pady=5)
  144.        
  145.        
  146.        
  147.        
  148.         # creamos los frames para la lista de las canciones
  149.         frame_cancion = LabelFrame(
  150.             self.root,
  151.             text = "Lista de canciones",
  152.             font=("times new roman", 15, "bold"),
  153.             bg="Gray",
  154.             fg="white",
  155.             bd=5,
  156.             relief=GROOVE
  157.         )
  158.         frame_cancion.grid(row=0, column=1, rowspan=2, sticky="nsew")
  159.        
  160.        
  161.        
  162.        
  163.         self.root.columnconfigure(1,weight=1)
  164.         self.root.rowconfigure(0,weight=1)
  165.         self.root.rowconfigure(0,weight=1)
  166.        
  167.         # insertamos las barras de scroll
  168.         scroll_y = Scrollbar(frame_cancion, orient=VERTICAL)
  169.         scroll_x = Scrollbar(frame_cancion, orient=HORIZONTAL)
  170.        
  171.         # insertamos un listbox con la lista de canciones en el frame de
  172.         # canciones
  173.         self.playlist = Listbox(
  174.             frame_cancion,
  175.             yscrollcommand=scroll_y.set,
  176.             xscrollcommand=scroll_x.set,
  177.             selectbackground="gold",
  178.             selectmode=SINGLE,
  179.             font=("times new roman", 12, "bold"),
  180.             bg="gray",
  181.             fg="white",
  182.             bd=5,
  183.             relief=GROOVE
  184.         )
  185.        
  186.         # aplico los scroll al listbox
  187.         scroll_y.pack(side=RIGHT,fill=Y)
  188.         scroll_y.config(command=self.playlist.yview)
  189.         scroll_x.pack(side=BOTTOM,fill=X)
  190.         scroll_x.config(command=self.playlist.xview)
  191.         self.playlist.pack(expand=True, fill=BOTH)
  192.        
  193.        
  194.     def cargar(self):
  195.         # elegimos el directorio
  196.         ruta = fd.askdirectory()
  197.         self.playlist.delete(0,END)
  198.         # insertamos las canciones en la playlist
  199.         for carpeta_actual, lista_carpetas,lista_archivos in os.walk(ruta):
  200.             for archivo in lista_archivos:
  201.                 cancion = os.path.join(carpeta_actual,archivo)
  202.                 self.playlist.insert(END,cancion)
  203.        
  204.        
  205.     def playsong(self):
  206.         """reproduce la canción elegida"""
  207.         if self.estado.get() == "Pausado":
  208.             self.estado.set("Reproduciendo")
  209.             pygame.mixer.music.unpause()
  210.         else:
  211.             # muestro la canción
  212.             titulo = self.playlist.get(ACTIVE)
  213.             self.pista.set(os.path.basename(titulo))
  214.             # muestro el estado
  215.             self.estado.set("Reproduciendo")
  216.             # cargo lacanción elegida
  217.             pygame.mixer.music.load(titulo)
  218.             pygame.mixer.music.play()
  219.            
  220.    
  221.     def pausesong(self):
  222.         """Pausa la reproducción"""
  223.         # Cambio el estado
  224.         self.estado.set("Pausado")
  225.         # pauso la canción
  226.         pygame.mixer.music.pause()
  227.        
  228.        
  229.     def unpausesong(self):
  230.         """Vuelve a reproducir"""
  231.         # Cambio el estado
  232.         self.estado.set("Reproduciendo")
  233.         # saco de pausa a la canción
  234.         pygame.mixer.music.unpause()
  235.        
  236.        
  237.     def stopsong(self):
  238.         """Detiene la reproducción"""
  239.         # Cambio el estado
  240.         self.estado.set("Detenido")
  241.         # detengo la canción
  242.         pygame.mixer.music.stop()
  243.    
  244.    
  245.        
  246. if __name__ == "__main__":
  247.     root = Tk()
  248.     reproductor = MusicPlayer(root)
  249.     root.mainloop()
  250.        
  251.        
  252.        
  253.        
  254.        
  255.        
  256.        
  257.        
  258.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement