import json from PyQt6.QtGui import QIcon, QAction from PyQt6.QtWidgets import QApplication, QMenu, QSystemTrayIcon from PyQt6.QtMultimedia import QAudioOutput, QMediaPlayer from PyQt6.QtCore import QUrl import os path = os.path.dirname(os.path.abspath(__file__)) app = QApplication([]) app.setQuitOnLastWindowClosed(False) # Adding an icon icon = QIcon(path + "/radio.png") # Adding item on the menu bar tray = QSystemTrayIcon() tray.setIcon(icon) tray.setVisible(True) # Creating the options menu = QMenu() # aƱadimos el json f = open(path + "/radios.json", "rb") jsonObject = json.load(f) f.close() # reproductor player = QMediaPlayer() audio_output = QAudioOutput() player.setAudioOutput(audio_output) audio_output.setVolume(100) # escuchar la radio def escuchar(url): player.stop() player.setSource(QUrl.fromLocalFile(url)) player.play() menu.removeAction(quit) menu.removeAction(para) menu.removeAction(reanuda) menu.addAction(pausa) menu.addAction(para) menu.addAction(quit) # para ordenar las emisoras por el nombre def sortFn(dict): return dict['nombre'] # las categorias for tag in sorted(jsonObject[0].keys()): globals()['menu%s' % tag] = QMenu(tag) menu.addMenu(globals()['menu%s' % tag]) # las opciones dentro de las catgorias jsonObject[0][tag].sort(key=sortFn) for i, item in enumerate(jsonObject[0][tag]): iconPlay = QIcon(path + "/play.png") globals()['action%s' % item["nombre"]] = QAction( iconPlay, item["nombre"]) globals()['action%s' % item["nombre"]].triggered.connect( lambda checked, url=item["url"]: escuchar(url) ) globals()['menu%s' % tag].addAction( globals()['action%s' % item["nombre"]]) # Pausar def pausar(): player.pause() menu.removeAction(quit) menu.removeAction(para) menu.removeAction(pausa) menu.addAction(reanuda) menu.addAction(para) menu.addAction(quit) iconPausar = QIcon(path + "/pause.png") pausa = QAction(iconPausar, "Pausar") pausa.triggered.connect(lambda: pausar()) # Reaunudar def reanudar(): player.play() menu.removeAction(quit) menu.removeAction(para) menu.removeAction(reanuda) menu.addAction(pausa) menu.addAction(para) menu.addAction(quit) iconReanudar = QIcon(path + "/resume.png") reanuda = QAction(iconReanudar, "Reanudar") reanuda.triggered.connect(lambda: reanudar()) # Parar def parar(): menu.removeAction(reanuda) menu.removeAction(pausa) player.stop() iconParar = QIcon(path + "/stop.png") para = QAction(iconParar, "Parar") para.triggered.connect(lambda: parar()) menu.addAction(para) # To quit the app iconExit = QIcon(path + "/exit.png") quit = QAction(iconExit, "Quit") quit.triggered.connect(app.quit) menu.addAction(quit) # Adding options to the System Tray tray.setContextMenu(menu) app.exec()