Commit c0cf63a3 authored by Thorfin89's avatar Thorfin89

Optimisation du code. Programmation des fonctions radio avant et arrière.

parent 4fa0d370
......@@ -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):
......@@ -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")
......@@ -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
......@@ -96,44 +110,48 @@ 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
num_radio = y_logo * 5 + x_logo # indexation du numéro de radio
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
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))
btn_logo.place(width=100, height=100, x=x_logo * 100, y=y_logo * 100)
except: # quand le nombre de radios est < 20
pass
def radio_selected(self, flux, num_radio):
self.radio_flux(flux)
# 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
num_radio = y_logo * 5 + x_logo # indexation du numéro de radio
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: # 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(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 on ne crée pas de bouton
pass
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
......
28
\ No newline at end of file
72
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment