Commit a999bdb6 authored by Thorfin89's avatar Thorfin89

Synchro portable

parent 4878d5e0
...@@ -4,11 +4,10 @@ ...@@ -4,11 +4,10 @@
# import ---------------------------------- # import ----------------------------------
import tkinter as tk import tkinter as tk
from tkinter import ttk, Scale, HORIZONTAL, CENTER from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, TOP
import csv import csv
mute = False # le son n'est pas coupé au démarrage mute = False # le son n'est pas coupé au démarrage
bg_color = "gray"
# classes --------------------------------- # classes ---------------------------------
...@@ -19,7 +18,7 @@ class Pupitre: ...@@ -19,7 +18,7 @@ class Pupitre:
self.root.title("Web Radio Pi") self.root.title("Web Radio Pi")
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) # < A basculer sur False pour les test sur PC
# images des boutons # images des boutons
self.icon_back = tk.PhotoImage(file="icons/back.png") self.icon_back = tk.PhotoImage(file="icons/back.png")
...@@ -30,51 +29,43 @@ class Pupitre: ...@@ -30,51 +29,43 @@ class Pupitre:
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.zones() # affichage des 3 zones self.logox = tk.PhotoImage(file="images/radio.png")
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
def zones(self): self.zones()
# fenêtre contenant la mosaïque de logos des radios > dim 500x400 self.radios_display()
self.zone_mosaique = tk.Frame(self.root, bg="lightgray")
self.zone_mosaique.place(width="500", height="400", x=0, y=0)
# 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)
# noinspection PyTypeChecker
def zones(self):
# fenêtre Haute : Titre / Menu > dim 800x80 # fenêtre Haute : Titre / Menu > dim 800x80
self.bandeau = tk.Frame(self.root, bg='gray') bandeau = tk.Frame(self.root, width="800", height="80", bg='gray')
self.bandeau.place(width="800", height="80", x=0, y=400) bandeau.pack(side=TOP, expand='True')
def boutons(self):
# affiche du logo de la radio sélectionnée >>> placer ici l'icone de la radio en 200x200 # fenêtre contenant les boutons (logos) des radios > dim 500x400
self.lbl_radio_selected = ttk.Label(self.menu) self.zone_logos = tk.Frame(self.root, width="500", height="400", bg='black')
# self.lbl_radio_selected.config(bg="lightgray", fg="black") self.zone_logos.pack(side=LEFT, expand='True')
self.lbl_radio_selected.place(width=225, height=225, x=38, y=38) # fenêtre d'affichage de la radio en cours de lecture et des boutons de commande > dim 300x400
menu = tk.Frame(self.root, width="300", height="400", bg="#D9D9D9")
menu.pack(side=RIGHT, expand='True')
# Position d'origine du menu boutons # Position d'origine du menu
x_menu = 0 x_menu = 0
y_menu = 290 y_menu = 240
# 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="#D9D9D9")
# 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, text="Back", command=None, style="BW.TLabel") btn_back = ttk.Button(menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel")
btn_back.place(width=48, height=32, x=x_menu + 30, y=y_menu + 0) 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(menu, image=self.icon_pause, text="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)
btn_pause = ttk.Button(self.menu, image=self.icon_play, text="Play", command=self.radio_play, style="BW.TLabel") btn_pause = ttk.Button(menu, image=self.icon_play, text="Play", command=self.radio_play, style="BW.TLabel")
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, text="Stop", command=self.radio_stop, style="BW.TLabel") btn_stop = ttk.Button(menu, image=self.icon_stop, text="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, text="Forward", command=None, style="BW.TLabel") btn_forward = ttk.Button(menu, image=self.icon_forward, text="Forward", command=None, style="BW.TLabel")
btn_forward.place(width=48, height=32, x=x_menu + 225, y=y_menu + 0) btn_forward.place(width=48, height=32, x=x_menu + 225, y=y_menu + 0)
# potentiomètre de volume # potentiomètre de volume
...@@ -83,24 +74,28 @@ class Pupitre: ...@@ -83,24 +74,28 @@ class Pupitre:
volume_init = lecture.read() volume_init = lecture.read()
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(menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume",
length=190, label="Volume", command=self.volume, bg=bg_color, highlightthickness=0) command=self.volume)
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 + 30, y=y_menu + 40)
# 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(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=40, height=32, x=x_menu + 245, y=y_menu + 70)
def mosaique(self): # récupération de la liste des radios (+infos) et affichage de la mosaïque de logos # affichage de l'info sur l'application dans le bas
lbl_info = ttk.Label(menu, text="WebRadioPi © Thorfin89", anchor=CENTER)
lbl_info.place(width=300, height=16, x=x_menu + 0, y=y_menu + 140)
def radios_display(self): # récupération de la liste des radios (+infos)
self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] self.logo = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
with open("./data/radios.csv", 'r', encoding='utf8') as radios_file: with open("./data/radios.csv", 'r', encoding='utf8') as radios_file:
radios_list = csv.DictReader(radios_file) radios_list = csv.DictReader(radios_file)
radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires
# boucles de remplissage de la mosaïque de logos # boucles de remplissage de la zone des logos
for y_logo in range(4): # 4 lignes for y_logo in range(4): # 4 lignes
for x_logo in range(5): # 5 colonnes for x_logo in range(5): # 5 colonnes
...@@ -111,42 +106,27 @@ class Pupitre: ...@@ -111,42 +106,27 @@ class Pupitre:
self.logo[num_radio] = tk.PhotoImage(file="images/" + radios_list[num_radio]['Logo']) 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: # si il n'y a pas de logo pour la radio
self.logo[num_radio] = tk.PhotoImage(file="images/radio.png") 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 except: # quand le nombre de radios est < 20
pass self.logo[num_radio] = tk.PhotoImage(file="images/blank.png")
def radio_selected(self, flux, num_radio): # création du bouton avec le logo de la radio
self.radio_flux(flux) btn_logo = tk.Button(self.zone_logos, image=self.logo[num_radio])
# affichage de la radio sélectionnée # utilisation de la fonction 'lambda' indexée sur la position du logo
with open("./data/radios.csv", 'r', encoding='utf8') as radios_file: btn_logo.config(command=lambda x=x_logo, y=y_logo: print(x + y * 5 + 1)) # <<< fonction à préciser
radios_list = csv.DictReader(radios_file) btn_logo.place(width=100, height=100, x=x_logo * 100, y=y_logo * 100)
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)
def switch_sound(self): # bascule on/off du son def switch_sound(self):
# bascule on/off du son
global mute global mute
if not mute: if not mute:
self.mute() self.radio_mute()
self.btn_mute.config(image=self.icon_mute) # affichage "logo sound off" self.btn_mute.config(image=self.icon_mute) # affichage "logo sound off"
mute = True mute = True
else: else:
self.unmute() self.radio_sound()
self.btn_mute.config(image=self.icon_sound) # affichage "logo sound on" self.btn_mute.config(image=self.icon_sound) # affichage "logo sound on"
mute = False mute = False
def info(self):
# affichage de l'info sur l'application dans le bas
lbl_info = tk.Label(self.bandeau, text="WebRadioPi © Thorfin89", anchor=CENTER)
lbl_info.config(bg="gray51", fg="white")
lbl_info.place(width=180, height=16, x=620, y=60)
def boucle(self): def boucle(self):
self.root.mainloop() self.root.mainloop()
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