Chargement en cours data/radios.csv +19 −0 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -19,3 +19,22 @@ Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderr Virgin Rock 70,DE,Rock,http://icy.unitedradio.it/VirginRock70.mp3,virginrock70.png Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png Celtic Folk Punk,DE,Celtic-Folk-Punk,https://streamingp.shoutcast.com/JamendoLounge,celtik-folk-punk.png Live Ireland,DE,Celtic,http://192.111.140.11:8058/stream?type=http&nocache=51282,live-ireland.png Bretagne Blog,DE,Celtic,http://laut.fm/bretagneblog,bretagneblog.png Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderradio/stream,Highlander.png France Bleue Isère,FR,Régionale,http://direct.francebleu.fr/live/fbisere-midfi.mp3,fb-isere.png France Bleu Armorique,FR,Régionale,http://direct.francebleu.fr/live/fbarmorique-midfi.mp3,fb-armorique.png RTL,FR,Généraliste,http://icecast.rtl.fr/rtl-1-44-128?listen=webCwsBCggNCQgLDQUGBAcGBg,rtl.png Europe 1,FR,Généraliste,http://stream.europe1.fr/europe1.mp3,europe-1.png Nostalgie,FR,Divers,http://scdn.nrjaudio.fm/adwz2/fr/30601/mp3_128.mp3?origine=fluxradios,nostalgie.png Dépèche Mode,UK,Rock,http://streaming.radionomy.com/wwwdepechemodebe-radio,dempechemode.png TSF Jazz,FR,Jazz,http://tsfjazz.ice.infomaniak.ch/tsfjazz-high.mp3,tsf-jazz.png Live Ireland,DE,Celtic,http://192.111.140.11:8058/stream?type=http&nocache=51282,live-ireland.png Bretagne Blog,DE,Celtic,http://laut.fm/bretagneblog,bretagneblog.png Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderradio/stream,Highlander.png Bretagne Blog,DE,Celtic,http://laut.fm/bretagneblog,bretagneblog.png Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderradio/stream,Highlander.png Virgin Rock 70,DE,Rock,http://icy.unitedradio.it/VirginRock70.mp3,virginrock70.png Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png Celtic Folk Punk,DE,Celtic-Folk-Punk,https://streamingp.shoutcast.com/JamendoLounge,celtik-folk-punk.png Live Ireland,DE,Celtic,http://192.111.140.11:8058/stream?type=http&nocache=51282,live-ireland.png No newline at end of file icons/pageb.png 0 → 100644 +9,01 ko Chargement de la diff d'image… icons/pagef.png 0 → 100644 +9,14 ko Chargement de la diff d'image… main.py +20 −2 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -30,7 +30,7 @@ class Radio(Pupitre): def radio_pause(self): self.player.pause() def radio_stop(self): def flux_stop(self): self.player.stop() def volume(self, vol_potar): Chargement en cours @@ -55,14 +55,32 @@ class Radio(Pupitre): def radio_forward(self): # passe à la radio suivante self.num_radio_selected += 1 if self.num_radio_selected == self.nb_radios: # changement de page automatique if self.num_radio_selected % 20 == 0 and self.num_radio_selected < self.nb_radios: # si le numéro est un multiple de 20 et qu'on n'est pas au bout de la liste self.page_forward() if self.num_radio_selected == self.nb_radios: # si on arrive à la fin de la liste self.num_radio_selected = 0 self.current_page = 0 self.mosaique() self.radio_selected(self.num_radio_selected) def radio_back(self): # passe à la radio précédente self.num_radio_selected -= 1 print(self.num_radio_selected) # changement de page automatique if (self.num_radio_selected + 1) % 20 == 0 and self.num_radio_selected != -1: # si le numéro est un multiple de 20 self.page_back() if self.num_radio_selected == -1: self.num_radio_selected = self.nb_radios - 1 self.current_page = self.nb_pages self.mosaique() self.radio_selected(self.num_radio_selected) def info_r(self): Chargement en cours pupitre.py +69 −29 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -26,6 +26,8 @@ class Pupitre: def __init__(self): # calcul du nombre de radios contenues dans le fichier CSV self.nb_radios = len(radios_list) self.nb_pages = self.nb_radios // 20 # partie entière de la division + 1 self.current_page = 0 # déclaration de la fenêtre principale self.root = tk.Tk() Chargement en cours @@ -33,6 +35,7 @@ class Pupitre: self.root.geometry("800x480") self.root.resizable(width=False, height=False) self.root.attributes('-fullscreen', False) # < à basculer sur False pour les tests sur PC self.root.config(bg=bg_color) # images des boutons self.icon_back = tk.PhotoImage(file="./icons/back.png") Chargement en cours @@ -42,11 +45,14 @@ class Pupitre: self.icon_forward = tk.PhotoImage(file="./icons/forward.png") self.icon_sound = tk.PhotoImage(file="./icons/sound_up.png") self.icon_mute = tk.PhotoImage(file="./icons/mute.png") self.icon_pageb = tk.PhotoImage(file="./icons/pageb.png") self.icon_pagef = tk.PhotoImage(file="./icons/pagef.png") self.zones() # affichage des 3 zones self.mosaique() # affichage d'une mosaïque de logos des radios self.boutons() # affichage des boutons self.info() # affichage de l'info sur l'application self.pages() # gestion des pages de logos self.num_radio_selected = 0 Chargement en cours @@ -57,31 +63,28 @@ class Pupitre: # fenêtre d'affichage de la radio en cours de lecture et des boutons de commande > dim 300x400 self.menu = tk.Frame(self.root, width="300", height="400", bg=bg_color) self.menu.place(width="300", height="400", x=501, y=0) self.menu.place(width="300", height="480", x=501, y=0) # fenêtre Haute : Titre / Menu > dim 800x80 self.bandeau = tk.Frame(self.root, bg='gray') self.bandeau.place(width="800", height="80", x=0, y=400) self.bandeau = tk.Frame(self.root, bg=bg_color) self.bandeau.place(width="500", height="80", x=0, y=400) def boutons(self): # affiche du logo de la radio sélectionnée >>> placer ici l'icone de la radio en 200x200 self.lbl_radio_selected = ttk.Label(self.menu) # self.lbl_radio_selected.config(bg="lightgray", fg="black") self.lbl_radio_selected.place(width=225, height=225, x=38, y=38) # Position d'origine du menu boutons # Position d'origine de la barre de boutons x_menu = 0 y_menu = 290 y_menu = 320 # définition d'un style commun à tous les boutons style = ttk.Style() 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, 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, command=self.radio_pause, style="BW.TLabel") btn_play.place(width=32, height=32, x=x_menu + 90, y=y_menu + 0) Chargement en cours @@ -89,8 +92,6 @@ class Pupitre: 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, 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, 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 # - on charge la configuration du volume sauvegardée Chargement en cours @@ -99,14 +100,21 @@ class Pupitre: lecture.close() # - affichage du potentiomètre de volume vol_potar = Scale(self.menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=190, label="Volume", command=self.volume, bg=bg_color, highlightthickness=0) length=190, label="Volume", command=self.volume, bg=bg_color, fg="white", highlightthickness=0) vol_potar.set(volume_init) vol_potar.place(x=x_menu + 50, y=y_menu + 40) vol_potar.place(x=x_menu + 50, y=y_menu + 50) # boutons de coupure et rétablissement du son self.btn_mute = ttk.Button(self.menu, image=self.icon_sound, text="Mute", command=self.switch_sound, style="BW.TLabel") self.btn_mute.place(width=30, height=32, x=x_menu + 245, y=y_menu + 70) self.btn_mute.place(width=30, height=32, x=x_menu + 245, y=y_menu + 80) # boutons radio avant/arrière dans le bandeau en bas à gauche btn_back = ttk.Button(self.bandeau, image=self.icon_back, command=self.radio_back, style="BW.TLabel") btn_back.place(width=48, height=32, x=x_menu + 60, y=10) btn_forward = ttk.Button(self.bandeau, image=self.icon_forward, command=self.radio_forward, style="BW.TLabel") btn_forward.place(width=48, height=32, x=x_menu + 394, y=10) def mosaique(self): # récupération de la liste des radios (+infos) et affichage de la mosaïque de logos self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] Chargement en cours @@ -117,29 +125,37 @@ class Pupitre: 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 num_case = y_logo * 5 + x_logo # indexation des cases de la mosaique de 0 à 19 num_radio = (20 * self.current_page) + num_case # indexation du numéro de radio try: if radios_list[num_radio]['Logo'] != "": # si un logo est associé à la radio if num_radio < self.nb_radios: # si on a bien une radio if radios_list[num_radio]['Logo'] != "": # si un logo est associé à ce flux img = Image.open("./images/" + radios_list[num_radio]['Logo']) else: # s'il n'y a pas de logo pour la radio img = Image.open("./images/radio.png") # on redimensionne le logo img = img.resize((logo_size, logo_size), Image.ANTIALIAS) self.logo[num_radio] = ImageTk.PhotoImage(img) self.logo[num_case] = ImageTk.PhotoImage(img) # création du bouton avec le logo de la radio btn_logo = tk.Button(self.zone_mosaique, image=self.logo[num_radio]) btn_logo = tk.Button(self.zone_mosaique, image=self.logo[num_case]) # utilisation d'une fonction 'lambda' indexée sur la position du logo btn_logo.config( command=lambda flux=radios_list[num_radio]['Url'], 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 else: pass def radio_stop(self): self.flux_stop() self.lbl_radio_selected.config(image="") self.lbl_info_radio.config(text="") def radio_selected(self, num_radio): self.radio_flux(radios_list[num_radio]['Url']) Chargement en cours @@ -156,7 +172,8 @@ class Pupitre: self.lbl_radio_selected.config(image=self.logo_selected) # affiche le nom de la radio sélectionnée self.lbl_info_radio.config(text=radios_list[num_radio]['Nom'], font=('Helvatical bold', 20)) self.lbl_info_radio.config(text=radios_list[num_radio]['Nom'], font=('Helvatical bold', 18), bg=bg_color, fg="white") self.num_radio_selected = num_radio def switch_sound(self): # bascule on/off du son Chargement en cours @@ -172,13 +189,36 @@ class Pupitre: def info(self): # affichage de l'info sur la radio en cours d'audition self.lbl_info_radio = tk.Label(self.bandeau) self.lbl_info_radio.place(width=500, height=60, x=0, y=10) self.lbl_info_radio = tk.Label(self.menu) self.lbl_info_radio.place(width=280, height=30, x=10, y=270) self.lbl_info_radio.config(bg=bg_color) # affichage de l'info sur l'application dans le bas self.lbl_info = tk.Label(self.bandeau, text="WebRadioPi © Thorfin89", anchor=CENTER) self.lbl_info.config(bg="white", fg="black") self.lbl_info.place(width=180, height=16, x=620, y=60) self.lbl_info = tk.Label(self.menu, text="WebRadioPi © Thorfin89", anchor=CENTER) self.lbl_info.config(bg=bg_color, fg="white", font=('Helvatical bold', 8)) self.lbl_info.place(width=180, height=16, x=60, y=460) def pages(self): # bouton page arrière btn_pageb = ttk.Button(self.bandeau, image=self.icon_pageb, command=self.page_back, style="BW.TLabel") btn_pageb.place(width=40, height=32, x=5, y=10) # bouton page avant btn_pagef = ttk.Button(self.bandeau, image=self.icon_pagef, command=self.page_forward, style="BW.TLabel") btn_pagef.place(width=40, height=32, x=455, y=10) def page_back(self): self.current_page -= 1 if self.current_page < 0: self.current_page = self.nb_pages self.mosaique() def page_forward(self): self.current_page += 1 if self.current_page > self.nb_pages: self.current_page = 0 self.mosaique() def boucle(self): self.root.mainloop() Chargement en cours
data/radios.csv +19 −0 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -19,3 +19,22 @@ Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderr Virgin Rock 70,DE,Rock,http://icy.unitedradio.it/VirginRock70.mp3,virginrock70.png Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png Celtic Folk Punk,DE,Celtic-Folk-Punk,https://streamingp.shoutcast.com/JamendoLounge,celtik-folk-punk.png Live Ireland,DE,Celtic,http://192.111.140.11:8058/stream?type=http&nocache=51282,live-ireland.png Bretagne Blog,DE,Celtic,http://laut.fm/bretagneblog,bretagneblog.png Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderradio/stream,Highlander.png France Bleue Isère,FR,Régionale,http://direct.francebleu.fr/live/fbisere-midfi.mp3,fb-isere.png France Bleu Armorique,FR,Régionale,http://direct.francebleu.fr/live/fbarmorique-midfi.mp3,fb-armorique.png RTL,FR,Généraliste,http://icecast.rtl.fr/rtl-1-44-128?listen=webCwsBCggNCQgLDQUGBAcGBg,rtl.png Europe 1,FR,Généraliste,http://stream.europe1.fr/europe1.mp3,europe-1.png Nostalgie,FR,Divers,http://scdn.nrjaudio.fm/adwz2/fr/30601/mp3_128.mp3?origine=fluxradios,nostalgie.png Dépèche Mode,UK,Rock,http://streaming.radionomy.com/wwwdepechemodebe-radio,dempechemode.png TSF Jazz,FR,Jazz,http://tsfjazz.ice.infomaniak.ch/tsfjazz-high.mp3,tsf-jazz.png Live Ireland,DE,Celtic,http://192.111.140.11:8058/stream?type=http&nocache=51282,live-ireland.png Bretagne Blog,DE,Celtic,http://laut.fm/bretagneblog,bretagneblog.png Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderradio/stream,Highlander.png Bretagne Blog,DE,Celtic,http://laut.fm/bretagneblog,bretagneblog.png Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderradio/stream,Highlander.png Virgin Rock 70,DE,Rock,http://icy.unitedradio.it/VirginRock70.mp3,virginrock70.png Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png Celtic Folk Punk,DE,Celtic-Folk-Punk,https://streamingp.shoutcast.com/JamendoLounge,celtik-folk-punk.png Live Ireland,DE,Celtic,http://192.111.140.11:8058/stream?type=http&nocache=51282,live-ireland.png No newline at end of file
main.py +20 −2 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -30,7 +30,7 @@ class Radio(Pupitre): def radio_pause(self): self.player.pause() def radio_stop(self): def flux_stop(self): self.player.stop() def volume(self, vol_potar): Chargement en cours @@ -55,14 +55,32 @@ class Radio(Pupitre): def radio_forward(self): # passe à la radio suivante self.num_radio_selected += 1 if self.num_radio_selected == self.nb_radios: # changement de page automatique if self.num_radio_selected % 20 == 0 and self.num_radio_selected < self.nb_radios: # si le numéro est un multiple de 20 et qu'on n'est pas au bout de la liste self.page_forward() if self.num_radio_selected == self.nb_radios: # si on arrive à la fin de la liste self.num_radio_selected = 0 self.current_page = 0 self.mosaique() self.radio_selected(self.num_radio_selected) def radio_back(self): # passe à la radio précédente self.num_radio_selected -= 1 print(self.num_radio_selected) # changement de page automatique if (self.num_radio_selected + 1) % 20 == 0 and self.num_radio_selected != -1: # si le numéro est un multiple de 20 self.page_back() if self.num_radio_selected == -1: self.num_radio_selected = self.nb_radios - 1 self.current_page = self.nb_pages self.mosaique() self.radio_selected(self.num_radio_selected) def info_r(self): Chargement en cours
pupitre.py +69 −29 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -26,6 +26,8 @@ class Pupitre: def __init__(self): # calcul du nombre de radios contenues dans le fichier CSV self.nb_radios = len(radios_list) self.nb_pages = self.nb_radios // 20 # partie entière de la division + 1 self.current_page = 0 # déclaration de la fenêtre principale self.root = tk.Tk() Chargement en cours @@ -33,6 +35,7 @@ class Pupitre: self.root.geometry("800x480") self.root.resizable(width=False, height=False) self.root.attributes('-fullscreen', False) # < à basculer sur False pour les tests sur PC self.root.config(bg=bg_color) # images des boutons self.icon_back = tk.PhotoImage(file="./icons/back.png") Chargement en cours @@ -42,11 +45,14 @@ class Pupitre: self.icon_forward = tk.PhotoImage(file="./icons/forward.png") self.icon_sound = tk.PhotoImage(file="./icons/sound_up.png") self.icon_mute = tk.PhotoImage(file="./icons/mute.png") self.icon_pageb = tk.PhotoImage(file="./icons/pageb.png") self.icon_pagef = tk.PhotoImage(file="./icons/pagef.png") self.zones() # affichage des 3 zones self.mosaique() # affichage d'une mosaïque de logos des radios self.boutons() # affichage des boutons self.info() # affichage de l'info sur l'application self.pages() # gestion des pages de logos self.num_radio_selected = 0 Chargement en cours @@ -57,31 +63,28 @@ class Pupitre: # fenêtre d'affichage de la radio en cours de lecture et des boutons de commande > dim 300x400 self.menu = tk.Frame(self.root, width="300", height="400", bg=bg_color) self.menu.place(width="300", height="400", x=501, y=0) self.menu.place(width="300", height="480", x=501, y=0) # fenêtre Haute : Titre / Menu > dim 800x80 self.bandeau = tk.Frame(self.root, bg='gray') self.bandeau.place(width="800", height="80", x=0, y=400) self.bandeau = tk.Frame(self.root, bg=bg_color) self.bandeau.place(width="500", height="80", x=0, y=400) def boutons(self): # affiche du logo de la radio sélectionnée >>> placer ici l'icone de la radio en 200x200 self.lbl_radio_selected = ttk.Label(self.menu) # self.lbl_radio_selected.config(bg="lightgray", fg="black") self.lbl_radio_selected.place(width=225, height=225, x=38, y=38) # Position d'origine du menu boutons # Position d'origine de la barre de boutons x_menu = 0 y_menu = 290 y_menu = 320 # définition d'un style commun à tous les boutons style = ttk.Style() 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, 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, command=self.radio_pause, style="BW.TLabel") btn_play.place(width=32, height=32, x=x_menu + 90, y=y_menu + 0) Chargement en cours @@ -89,8 +92,6 @@ class Pupitre: 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, 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, 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 # - on charge la configuration du volume sauvegardée Chargement en cours @@ -99,14 +100,21 @@ class Pupitre: lecture.close() # - affichage du potentiomètre de volume vol_potar = Scale(self.menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=190, label="Volume", command=self.volume, bg=bg_color, highlightthickness=0) length=190, label="Volume", command=self.volume, bg=bg_color, fg="white", highlightthickness=0) vol_potar.set(volume_init) vol_potar.place(x=x_menu + 50, y=y_menu + 40) vol_potar.place(x=x_menu + 50, y=y_menu + 50) # boutons de coupure et rétablissement du son self.btn_mute = ttk.Button(self.menu, image=self.icon_sound, text="Mute", command=self.switch_sound, style="BW.TLabel") self.btn_mute.place(width=30, height=32, x=x_menu + 245, y=y_menu + 70) self.btn_mute.place(width=30, height=32, x=x_menu + 245, y=y_menu + 80) # boutons radio avant/arrière dans le bandeau en bas à gauche btn_back = ttk.Button(self.bandeau, image=self.icon_back, command=self.radio_back, style="BW.TLabel") btn_back.place(width=48, height=32, x=x_menu + 60, y=10) btn_forward = ttk.Button(self.bandeau, image=self.icon_forward, command=self.radio_forward, style="BW.TLabel") btn_forward.place(width=48, height=32, x=x_menu + 394, y=10) def mosaique(self): # récupération de la liste des radios (+infos) et affichage de la mosaïque de logos self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] Chargement en cours @@ -117,29 +125,37 @@ class Pupitre: 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 num_case = y_logo * 5 + x_logo # indexation des cases de la mosaique de 0 à 19 num_radio = (20 * self.current_page) + num_case # indexation du numéro de radio try: if radios_list[num_radio]['Logo'] != "": # si un logo est associé à la radio if num_radio < self.nb_radios: # si on a bien une radio if radios_list[num_radio]['Logo'] != "": # si un logo est associé à ce flux img = Image.open("./images/" + radios_list[num_radio]['Logo']) else: # s'il n'y a pas de logo pour la radio img = Image.open("./images/radio.png") # on redimensionne le logo img = img.resize((logo_size, logo_size), Image.ANTIALIAS) self.logo[num_radio] = ImageTk.PhotoImage(img) self.logo[num_case] = ImageTk.PhotoImage(img) # création du bouton avec le logo de la radio btn_logo = tk.Button(self.zone_mosaique, image=self.logo[num_radio]) btn_logo = tk.Button(self.zone_mosaique, image=self.logo[num_case]) # utilisation d'une fonction 'lambda' indexée sur la position du logo btn_logo.config( command=lambda flux=radios_list[num_radio]['Url'], 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 else: pass def radio_stop(self): self.flux_stop() self.lbl_radio_selected.config(image="") self.lbl_info_radio.config(text="") def radio_selected(self, num_radio): self.radio_flux(radios_list[num_radio]['Url']) Chargement en cours @@ -156,7 +172,8 @@ class Pupitre: self.lbl_radio_selected.config(image=self.logo_selected) # affiche le nom de la radio sélectionnée self.lbl_info_radio.config(text=radios_list[num_radio]['Nom'], font=('Helvatical bold', 20)) self.lbl_info_radio.config(text=radios_list[num_radio]['Nom'], font=('Helvatical bold', 18), bg=bg_color, fg="white") self.num_radio_selected = num_radio def switch_sound(self): # bascule on/off du son Chargement en cours @@ -172,13 +189,36 @@ class Pupitre: def info(self): # affichage de l'info sur la radio en cours d'audition self.lbl_info_radio = tk.Label(self.bandeau) self.lbl_info_radio.place(width=500, height=60, x=0, y=10) self.lbl_info_radio = tk.Label(self.menu) self.lbl_info_radio.place(width=280, height=30, x=10, y=270) self.lbl_info_radio.config(bg=bg_color) # affichage de l'info sur l'application dans le bas self.lbl_info = tk.Label(self.bandeau, text="WebRadioPi © Thorfin89", anchor=CENTER) self.lbl_info.config(bg="white", fg="black") self.lbl_info.place(width=180, height=16, x=620, y=60) self.lbl_info = tk.Label(self.menu, text="WebRadioPi © Thorfin89", anchor=CENTER) self.lbl_info.config(bg=bg_color, fg="white", font=('Helvatical bold', 8)) self.lbl_info.place(width=180, height=16, x=60, y=460) def pages(self): # bouton page arrière btn_pageb = ttk.Button(self.bandeau, image=self.icon_pageb, command=self.page_back, style="BW.TLabel") btn_pageb.place(width=40, height=32, x=5, y=10) # bouton page avant btn_pagef = ttk.Button(self.bandeau, image=self.icon_pagef, command=self.page_forward, style="BW.TLabel") btn_pagef.place(width=40, height=32, x=455, y=10) def page_back(self): self.current_page -= 1 if self.current_page < 0: self.current_page = self.nb_pages self.mosaique() def page_forward(self): self.current_page += 1 if self.current_page > self.nb_pages: self.current_page = 0 self.mosaique() def boucle(self): self.root.mainloop()