Valider c0cf63a3 rédigé par Thorfin89's avatar Thorfin89
Parcourir les fichiers

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

parent 4fa0d370
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+56 −38
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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,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
@@ -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
+1 −1
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