Chargement en cours pupitre.py +37 −19 Changes for pupitre.py: 37 added lines, 19 removed lines. Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -10,8 +10,20 @@ import csv mute = False # le son n'est pas coupé au démarrage bg_color = "gray" # Chargement du fichier CSV contenant les informations : Nom, Pays, Type, Url, Logo with open("./data/radios.csv", 'r', encoding='utf-8-sig') as radios_file: '''utf-8-sig au lieu de utf-8 pour éviter l'erreur sur le nom du 1er champ '\ufeffNom' transforme en liste de dictionnaires pour extraire une donnée : radios_list[numéro de la radio][nom du champ]''' radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # calcul du nombre de radios contenues dans le fichier CSV nb_radios = len(radios_list) # classes --------------------------------- class Pupitre: def __init__(self): Chargement en cours @@ -35,6 +47,8 @@ class Pupitre: self.boutons() # affichage des boutons self.info() # affichage de l'info sur l'application self.num_radio_selected = 0 def zones(self): # fenêtre contenant la mosaïque de logos des radios > dim 500x400 self.zone_mosaique = tk.Frame(self.root, bg="lightgray") Chargement en cours Chargement en cours @@ -65,16 +79,16 @@ class Pupitre: style.configure("BW.TLabel", foreground="black", background=bg_color) # affichage des boutons de commande : back, pause, play, stop, forward btn_back = ttk.Button(self.menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_back = ttk.Button(self.menu, image=self.icon_back, command=self.radio_back, style="BW.TLabel") btn_back.place(width=48, height=32, x=x_menu + 30, y=y_menu + 0) btn_play = ttk.Button(self.menu, image=self.icon_pause, text="Pause", command=self.radio_pause, btn_play = ttk.Button(self.menu, image=self.icon_pause, command=self.radio_pause, style="BW.TLabel") btn_play.place(width=32, height=32, x=x_menu + 90, y=y_menu + 0) btn_pause = ttk.Button(self.menu, image=self.icon_play, text="Play", command=self.radio_play, style="BW.TLabel") btn_pause = ttk.Button(self.menu, image=self.icon_play, command=self.radio_play, style="BW.TLabel") btn_pause.place(width=32, height=32, x=x_menu + 135, y=y_menu + 0) btn_stop = ttk.Button(self.menu, image=self.icon_stop, text="Stop", command=self.radio_stop, style="BW.TLabel") btn_stop = ttk.Button(self.menu, image=self.icon_stop, command=self.radio_stop, style="BW.TLabel") btn_stop.place(width=32, height=32, x=x_menu + 178, y=y_menu + 0) btn_forward = ttk.Button(self.menu, image=self.icon_forward, text="Forward", command=None, style="BW.TLabel") btn_forward = ttk.Button(self.menu, image=self.icon_forward, command=self.radio_forward, style="BW.TLabel") btn_forward.place(width=48, height=32, x=x_menu + 225, y=y_menu + 0) # potentiomètre de volume Chargement en cours @@ -96,11 +110,6 @@ class Pupitre: def mosaique(self): # récupération de la liste des radios (+infos) et affichage de la mosaïque de logos self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] with open("./data/radios.csv", 'r', encoding='utf-8-sig') as radios_file: # utf-8-sig au lieu de utf8 pour éviter l'erreur sur le nom du 1er champ '\ufeffNom' radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires # boucles de remplissage de la mosaïque de logos for y_logo in range(4): # 4 lignes for x_logo in range(5): # 5 colonnes Chargement en cours @@ -110,30 +119,39 @@ class Pupitre: try: if radios_list[num_radio]['Logo'] != "": # si un logo est associé à la radio self.logo[num_radio] = tk.PhotoImage(file="images/" + radios_list[num_radio]['Logo']) else: # si il n'y a pas de logo pour la radio else: # s'il n'y a pas de logo pour la radio self.logo[num_radio] = tk.PhotoImage(file="images/radio.png") # création du bouton avec le logo de la radio btn_logo = tk.Button(self.zone_mosaique, image=self.logo[num_radio]) # utilisation d'une fonction 'lambda' indexée sur la position du logo btn_logo.config( command=lambda flux=radios_list[num_radio]['Url'], num_radio=num_radio: self.radio_selected(flux, num_radio)) num_radio=num_radio: self.radio_selected(num_radio)) btn_logo.place(width=100, height=100, x=x_logo * 100, y=y_logo * 100) except: # quand le nombre de radios est < 20 except: # quand le nombre de radios est < 20 on ne crée pas de bouton pass def radio_selected(self, flux, num_radio): self.radio_flux(flux) def radio_selected(self, num_radio): self.radio_flux(radios_list[num_radio]['Url']) # affichage de la radio sélectionnée with open("./data/radios.csv", 'r', encoding='utf-8-sig') as radios_file: radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires self.logo_selected = tk.PhotoImage(file="images/Large/" + radios_list[num_radio]['Logo']) self.lbl_radio_selected.config(image=self.logo_selected) # print(radios_list[1]['Nom']) self.lbl_info_radio.config(text=radios_list[num_radio]['Nom'], font=('Helvatical bold', 20)) self.num_radio_selected = num_radio def radio_back(self): # passe à la radio précédente self.num_radio_selected -= 1 if self.num_radio_selected == -1: self.num_radio_selected = nb_radios - 1 self.radio_selected(self.num_radio_selected) def radio_forward(self): # passe à la radio suivante self.num_radio_selected += 1 if self.num_radio_selected == nb_radios: self.num_radio_selected = 0 self.radio_selected(self.num_radio_selected) def switch_sound(self): # bascule on/off du son global mute Chargement en cours webradiopi.cfg +1 −1 Changes for webradiopi.cfg: 1 added line, 1 removed line. Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff 28 No newline at end of file 72 No newline at end of file Chargement en cours
pupitre.py +37 −19 Changes for pupitre.py: 37 added lines, 19 removed lines. Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -10,8 +10,20 @@ import csv mute = False # le son n'est pas coupé au démarrage bg_color = "gray" # Chargement du fichier CSV contenant les informations : Nom, Pays, Type, Url, Logo with open("./data/radios.csv", 'r', encoding='utf-8-sig') as radios_file: '''utf-8-sig au lieu de utf-8 pour éviter l'erreur sur le nom du 1er champ '\ufeffNom' transforme en liste de dictionnaires pour extraire une donnée : radios_list[numéro de la radio][nom du champ]''' radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # calcul du nombre de radios contenues dans le fichier CSV nb_radios = len(radios_list) # classes --------------------------------- class Pupitre: def __init__(self): Chargement en cours @@ -35,6 +47,8 @@ class Pupitre: self.boutons() # affichage des boutons self.info() # affichage de l'info sur l'application self.num_radio_selected = 0 def zones(self): # fenêtre contenant la mosaïque de logos des radios > dim 500x400 self.zone_mosaique = tk.Frame(self.root, bg="lightgray") Chargement en cours Chargement en cours @@ -65,16 +79,16 @@ class Pupitre: style.configure("BW.TLabel", foreground="black", background=bg_color) # affichage des boutons de commande : back, pause, play, stop, forward btn_back = ttk.Button(self.menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_back = ttk.Button(self.menu, image=self.icon_back, command=self.radio_back, style="BW.TLabel") btn_back.place(width=48, height=32, x=x_menu + 30, y=y_menu + 0) btn_play = ttk.Button(self.menu, image=self.icon_pause, text="Pause", command=self.radio_pause, btn_play = ttk.Button(self.menu, image=self.icon_pause, command=self.radio_pause, style="BW.TLabel") btn_play.place(width=32, height=32, x=x_menu + 90, y=y_menu + 0) btn_pause = ttk.Button(self.menu, image=self.icon_play, text="Play", command=self.radio_play, style="BW.TLabel") btn_pause = ttk.Button(self.menu, image=self.icon_play, command=self.radio_play, style="BW.TLabel") btn_pause.place(width=32, height=32, x=x_menu + 135, y=y_menu + 0) btn_stop = ttk.Button(self.menu, image=self.icon_stop, text="Stop", command=self.radio_stop, style="BW.TLabel") btn_stop = ttk.Button(self.menu, image=self.icon_stop, command=self.radio_stop, style="BW.TLabel") btn_stop.place(width=32, height=32, x=x_menu + 178, y=y_menu + 0) btn_forward = ttk.Button(self.menu, image=self.icon_forward, text="Forward", command=None, style="BW.TLabel") btn_forward = ttk.Button(self.menu, image=self.icon_forward, command=self.radio_forward, style="BW.TLabel") btn_forward.place(width=48, height=32, x=x_menu + 225, y=y_menu + 0) # potentiomètre de volume Chargement en cours @@ -96,11 +110,6 @@ class Pupitre: def mosaique(self): # récupération de la liste des radios (+infos) et affichage de la mosaïque de logos self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] with open("./data/radios.csv", 'r', encoding='utf-8-sig') as radios_file: # utf-8-sig au lieu de utf8 pour éviter l'erreur sur le nom du 1er champ '\ufeffNom' radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires # boucles de remplissage de la mosaïque de logos for y_logo in range(4): # 4 lignes for x_logo in range(5): # 5 colonnes Chargement en cours @@ -110,30 +119,39 @@ class Pupitre: try: if radios_list[num_radio]['Logo'] != "": # si un logo est associé à la radio self.logo[num_radio] = tk.PhotoImage(file="images/" + radios_list[num_radio]['Logo']) else: # si il n'y a pas de logo pour la radio else: # s'il n'y a pas de logo pour la radio self.logo[num_radio] = tk.PhotoImage(file="images/radio.png") # création du bouton avec le logo de la radio btn_logo = tk.Button(self.zone_mosaique, image=self.logo[num_radio]) # utilisation d'une fonction 'lambda' indexée sur la position du logo btn_logo.config( command=lambda flux=radios_list[num_radio]['Url'], num_radio=num_radio: self.radio_selected(flux, num_radio)) num_radio=num_radio: self.radio_selected(num_radio)) btn_logo.place(width=100, height=100, x=x_logo * 100, y=y_logo * 100) except: # quand le nombre de radios est < 20 except: # quand le nombre de radios est < 20 on ne crée pas de bouton pass def radio_selected(self, flux, num_radio): self.radio_flux(flux) def radio_selected(self, num_radio): self.radio_flux(radios_list[num_radio]['Url']) # affichage de la radio sélectionnée with open("./data/radios.csv", 'r', encoding='utf-8-sig') as radios_file: radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires self.logo_selected = tk.PhotoImage(file="images/Large/" + radios_list[num_radio]['Logo']) self.lbl_radio_selected.config(image=self.logo_selected) # print(radios_list[1]['Nom']) self.lbl_info_radio.config(text=radios_list[num_radio]['Nom'], font=('Helvatical bold', 20)) self.num_radio_selected = num_radio def radio_back(self): # passe à la radio précédente self.num_radio_selected -= 1 if self.num_radio_selected == -1: self.num_radio_selected = nb_radios - 1 self.radio_selected(self.num_radio_selected) def radio_forward(self): # passe à la radio suivante self.num_radio_selected += 1 if self.num_radio_selected == nb_radios: self.num_radio_selected = 0 self.radio_selected(self.num_radio_selected) def switch_sound(self): # bascule on/off du son global mute Chargement en cours
webradiopi.cfg +1 −1 Changes for webradiopi.cfg: 1 added line, 1 removed line. Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff 28 No newline at end of file 72 No newline at end of file