Commit 9bd67245 authored by Thorfin89's avatar Thorfin89

Boutons défilements pages posés

parent 58539f5f
...@@ -14,7 +14,11 @@ Interface au 15/01/2023 ...@@ -14,7 +14,11 @@ Interface au 15/01/2023
#### Sur un eee-PC reconverti en poste de radio Web #### Sur un eee-PC reconverti en poste de radio Web
![WebRadioPi](docs/images/WebRadioPi-on-eeePC.png) ![WebRadioPi](docs/images/WebRadioPi-on-eeePC.png)
### Version Stable : v1.1
L'application est fonctionnelle.
Il manque l'affichage des informations sur le programme en cours d'écoute et la possibilité d'avoir plusieurs pages d'icones.
### INSTALLATION : ### INSTALLATION :
......
...@@ -19,3 +19,16 @@ Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderr ...@@ -19,3 +19,16 @@ Highlander Radio,DE,Celtic,https://jenny.torontocast.com:2000/stream/highlanderr
Virgin Rock 70,DE,Rock,http://icy.unitedradio.it/VirginRock70.mp3,virginrock70.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 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 Celtic Folk Punk,DE,Celtic-Folk-Punk,https://streamingp.shoutcast.com/JamendoLounge,celtik-folk-punk.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
Boom FM_Ottawa,CA,Rock,http://live.leanstream.co/CJOTFM-MP3,boom-ottawa.png
\ No newline at end of file
...@@ -30,7 +30,7 @@ class Radio(Pupitre): ...@@ -30,7 +30,7 @@ class Radio(Pupitre):
def radio_pause(self): def radio_pause(self):
self.player.pause() self.player.pause()
def radio_stop(self): def flux_stop(self):
self.player.stop() self.player.stop()
def volume(self, vol_potar): def volume(self, vol_potar):
......
...@@ -26,6 +26,8 @@ class Pupitre: ...@@ -26,6 +26,8 @@ class Pupitre:
def __init__(self): def __init__(self):
# calcul du nombre de radios contenues dans le fichier CSV # calcul du nombre de radios contenues dans le fichier CSV
self.nb_radios = len(radios_list) self.nb_radios = len(radios_list)
self.nb_pages = self.nb_radios // 20 # retient la partie entière de la division
print("Nombre de pages : " + str(self.nb_pages))
# déclaration de la fenêtre principale # déclaration de la fenêtre principale
self.root = tk.Tk() self.root = tk.Tk()
...@@ -33,6 +35,7 @@ class Pupitre: ...@@ -33,6 +35,7 @@ class Pupitre:
self.root.geometry("800x480") self.root.geometry("800x480")
self.root.resizable(width=False, height=False) self.root.resizable(width=False, height=False)
self.root.attributes('-fullscreen', False) # < à basculer sur False pour les tests sur PC self.root.attributes('-fullscreen', False) # < à basculer sur False pour les tests sur PC
self.root.config(bg=bg_color)
# images des boutons # images des boutons
self.icon_back = tk.PhotoImage(file="./icons/back.png") self.icon_back = tk.PhotoImage(file="./icons/back.png")
...@@ -42,11 +45,14 @@ class Pupitre: ...@@ -42,11 +45,14 @@ class Pupitre:
self.icon_forward = tk.PhotoImage(file="./icons/forward.png") self.icon_forward = tk.PhotoImage(file="./icons/forward.png")
self.icon_sound = tk.PhotoImage(file="./icons/sound_up.png") self.icon_sound = tk.PhotoImage(file="./icons/sound_up.png")
self.icon_mute = tk.PhotoImage(file="./icons/mute.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.zones() # affichage des 3 zones
self.mosaique() # affichage d'une mosaïque de logos des radios self.mosaique() # affichage d'une mosaïque de logos des radios
self.boutons() # affichage des boutons self.boutons() # affichage des boutons
self.info() # affichage de l'info sur l'application self.info() # affichage de l'info sur l'application
self.pages() # gestion des pages de logos
self.num_radio_selected = 0 self.num_radio_selected = 0
...@@ -57,11 +63,11 @@ class Pupitre: ...@@ -57,11 +63,11 @@ class Pupitre:
# fenêtre d'affichage de la radio en cours de lecture et des boutons de commande > dim 300x400 # 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 = 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 # fenêtre Haute : Titre / Menu > dim 800x80
self.bandeau = tk.Frame(self.root, bg='gray') self.bandeau = tk.Frame(self.root, bg=bg_color)
self.bandeau.place(width="800", height="80", x=0, y=400) self.bandeau.place(width="500", height="80", x=0, y=400)
def boutons(self): def boutons(self):
...@@ -71,17 +77,16 @@ class Pupitre: ...@@ -71,17 +77,16 @@ class Pupitre:
self.lbl_radio_selected.place(width=225, height=225, x=38, y=38) 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 x_menu = 0
y_menu = 290 y_menu = 320
# définition d'un style commun à tous les boutons # définition d'un style commun à tous les boutons
style = ttk.Style() style = ttk.Style()
style.configure("BW.TLabel", foreground="black", background=bg_color) style.configure("BW.TLabel", foreground="black", background=bg_color)
# affichage des boutons de commande : back, pause, play, stop, forward # 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, btn_play = ttk.Button(self.menu, image=self.icon_pause, command=self.radio_pause,
style="BW.TLabel") style="BW.TLabel")
btn_play.place(width=32, height=32, x=x_menu + 90, y=y_menu + 0) btn_play.place(width=32, height=32, x=x_menu + 90, y=y_menu + 0)
...@@ -89,8 +94,6 @@ class Pupitre: ...@@ -89,8 +94,6 @@ class Pupitre:
btn_pause.place(width=32, height=32, x=x_menu + 135, y=y_menu + 0) 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 = 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_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 # potentiomètre de volume
# - on charge la configuration du volume sauvegardée # - on charge la configuration du volume sauvegardée
...@@ -99,14 +102,21 @@ class Pupitre: ...@@ -99,14 +102,21 @@ class Pupitre:
lecture.close() lecture.close()
# - affichage du potentiomètre de volume # - affichage du potentiomètre de volume
vol_potar = Scale(self.menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, 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.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 # 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, self.btn_mute = ttk.Button(self.menu, image=self.icon_sound, text="Mute", command=self.switch_sound,
style="BW.TLabel") 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 def mosaique(self): # récupération de la liste des radios (+infos) et affichage de la mosaïque de logos
self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
...@@ -140,6 +150,11 @@ class Pupitre: ...@@ -140,6 +150,11 @@ class Pupitre:
except: # quand le nombre de radios est < 20 on ne crée pas de bouton except: # quand le nombre de radios est < 20 on ne crée pas de bouton
pass 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): def radio_selected(self, num_radio):
self.radio_flux(radios_list[num_radio]['Url']) self.radio_flux(radios_list[num_radio]['Url'])
...@@ -156,7 +171,8 @@ class Pupitre: ...@@ -156,7 +171,8 @@ class Pupitre:
self.lbl_radio_selected.config(image=self.logo_selected) self.lbl_radio_selected.config(image=self.logo_selected)
# affiche le nom de la radio sélectionnée # 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 self.num_radio_selected = num_radio
def switch_sound(self): # bascule on/off du son def switch_sound(self): # bascule on/off du son
...@@ -172,13 +188,22 @@ class Pupitre: ...@@ -172,13 +188,22 @@ class Pupitre:
def info(self): def info(self):
# affichage de l'info sur la radio en cours d'audition # affichage de l'info sur la radio en cours d'audition
self.lbl_info_radio = tk.Label(self.bandeau) self.lbl_info_radio = tk.Label(self.menu)
self.lbl_info_radio.place(width=500, height=60, x=0, y=10) 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 # 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 = tk.Label(self.menu, text="WebRadioPi © Thorfin89", anchor=CENTER)
self.lbl_info.config(bg="white", fg="black") self.lbl_info.config(bg=bg_color, fg="white", font=('Helvatical bold', 8))
self.lbl_info.place(width=180, height=16, x=620, y=60) 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=None, 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=None, style="BW.TLabel")
btn_pagef.place(width=40, height=32, x=455, y=10)
def boucle(self): def boucle(self):
self.root.mainloop() self.root.mainloop()
70 53
\ No newline at end of file \ 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