Chargement en cours main.py +1 −1 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -21,7 +21,7 @@ class Radio(Pupitre): print(flux) media = self.instance.media_new(flux) self.player.set_media(media) self.player.play() self.radio_play() def radio_play(self): self.player.play() Chargement en cours pupitre.py +44 −33 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -4,10 +4,11 @@ # import ---------------------------------- import tkinter as tk from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, TOP from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, BOTTOM, TOP import csv mute = False # le son n'est pas coupé au démarrage bg_color = "gray" # classes --------------------------------- Chargement en cours @@ -18,7 +19,7 @@ class Pupitre: self.root.title("Web Radio Pi") self.root.geometry("800x480") self.root.resizable(width=False, height=False) self.root.attributes('-fullscreen', False) # < A basculer sur False pour les test sur PC self.root.attributes('-fullscreen', False) # < à basculer sur False pour les tests sur PC # images des boutons self.icon_back = tk.PhotoImage(file="icons/back.png") Chargement en cours @@ -29,42 +30,50 @@ class Pupitre: self.icon_sound = tk.PhotoImage(file="icons/sound_up.png") self.icon_mute = tk.PhotoImage(file="icons/mute.png") self.logox = tk.PhotoImage(file="images/radio.png") self.zones() self.radios_display() self.zones() # affichage des 3 zones self.boutons() # affichage des boutons self.mosaique() # affichage d'une mosaïque de logos des radios self.info() def zones(self): # fenêtre contenant la mosaïque de logos des radios > dim 500x400 self.zone_mosaique = tk.Frame(self.root, bg='black') 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) # fenêtre Haute : Titre / Menu > dim 800x80 bandeau = tk.Frame(self.root, width="800", height="80", bg='gray') bandeau.pack(side=TOP) self.bandeau = tk.Frame(self.root, bg='gray') self.bandeau.place(width="800", height="80", x=0, y=400) # fenêtre contenant les boutons (logos) des radios > dim 500x400 self.zone_logos = tk.Frame(self.root, width="500", height="400", bg='black') self.zone_logos.pack(side=LEFT) def boutons(self): # 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) lbl_nom_radio = tk.Label() lbl_nom_radio = tk.Label(self.menu, text="INFO", anchor=CENTER) lbl_nom_radio.config(bg="white", fg="gray") lbl_nom_radio.place(width=200, height=200, x=50, y=50) # Position d'origine du menu x_menu = 0 y_menu = 240 y_menu = 290 # définition d'un style commun à tous les boutons style = ttk.Style() style.configure("BW.TLabel", foreground="black", background="#D9D9D9") style.configure("BW.TLabel", foreground="black", background=bg_color) # affichage des boutons de commande : back, pause, play, stop, forward btn_back = ttk.Button(menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_back = ttk.Button(self.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_play = ttk.Button(menu, image=self.icon_pause, text="Pause", command=self.radio_pause, style="BW.TLabel") btn_play = ttk.Button(self.menu, image=self.icon_pause, text="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(menu, image=self.icon_play, text="Play", command=self.radio_play, style="BW.TLabel") btn_pause = ttk.Button(self.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_stop = ttk.Button(menu, image=self.icon_stop, text="Stop", command=self.radio_stop, style="BW.TLabel") btn_stop = ttk.Button(self.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_forward = ttk.Button(menu, image=self.icon_forward, text="Forward", command=None, style="BW.TLabel") btn_forward = ttk.Button(self.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) # potentiomètre de volume Chargement en cours @@ -73,28 +82,24 @@ class Pupitre: volume_init = lecture.read() lecture.close() # - affichage du potentiomètre de volume vol_potar = Scale(menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", command=self.volume) vol_potar = Scale(self.menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", command=self.volume, bg=bg_color, highlightthickness=0) vol_potar.set(volume_init) vol_potar.place(x=x_menu + 30, y=y_menu + 40) # boutons de coupure et rétablissement du son self.btn_mute = ttk.Button(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") self.btn_mute.place(width=40, height=32, x=x_menu + 245, y=y_menu + 70) # 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) 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='utf8') as radios_file: 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 zone des logos # 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 Chargement en cours @@ -109,10 +114,10 @@ class Pupitre: self.logo[num_radio] = tk.PhotoImage(file="images/blank.png") # création du bouton avec le logo de la radio btn_logo = tk.Button(self.zone_logos, image=self.logo[num_radio]) # utilisation de la fonction 'lambda' indexée sur la position du logo 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']: self.radio_flux(flux)) # <<< fonction à préciser command=lambda flux=radios_list[num_radio]['Url']: self.radio_flux(flux)) btn_logo.place(width=100, height=100, x=x_logo * 100, y=y_logo * 100) def switch_sound(self): Chargement en cours @@ -128,5 +133,11 @@ class Pupitre: self.btn_mute.config(image=self.icon_sound) # affichage "logo sound on" 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): self.root.mainloop() webradiopi.cfg +1 −1 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff 86 No newline at end of file 90 No newline at end of file Chargement en cours
main.py +1 −1 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -21,7 +21,7 @@ class Radio(Pupitre): print(flux) media = self.instance.media_new(flux) self.player.set_media(media) self.player.play() self.radio_play() def radio_play(self): self.player.play() Chargement en cours
pupitre.py +44 −33 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -4,10 +4,11 @@ # import ---------------------------------- import tkinter as tk from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, TOP from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, BOTTOM, TOP import csv mute = False # le son n'est pas coupé au démarrage bg_color = "gray" # classes --------------------------------- Chargement en cours @@ -18,7 +19,7 @@ class Pupitre: self.root.title("Web Radio Pi") self.root.geometry("800x480") self.root.resizable(width=False, height=False) self.root.attributes('-fullscreen', False) # < A basculer sur False pour les test sur PC self.root.attributes('-fullscreen', False) # < à basculer sur False pour les tests sur PC # images des boutons self.icon_back = tk.PhotoImage(file="icons/back.png") Chargement en cours @@ -29,42 +30,50 @@ class Pupitre: self.icon_sound = tk.PhotoImage(file="icons/sound_up.png") self.icon_mute = tk.PhotoImage(file="icons/mute.png") self.logox = tk.PhotoImage(file="images/radio.png") self.zones() self.radios_display() self.zones() # affichage des 3 zones self.boutons() # affichage des boutons self.mosaique() # affichage d'une mosaïque de logos des radios self.info() def zones(self): # fenêtre contenant la mosaïque de logos des radios > dim 500x400 self.zone_mosaique = tk.Frame(self.root, bg='black') 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) # fenêtre Haute : Titre / Menu > dim 800x80 bandeau = tk.Frame(self.root, width="800", height="80", bg='gray') bandeau.pack(side=TOP) self.bandeau = tk.Frame(self.root, bg='gray') self.bandeau.place(width="800", height="80", x=0, y=400) # fenêtre contenant les boutons (logos) des radios > dim 500x400 self.zone_logos = tk.Frame(self.root, width="500", height="400", bg='black') self.zone_logos.pack(side=LEFT) def boutons(self): # 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) lbl_nom_radio = tk.Label() lbl_nom_radio = tk.Label(self.menu, text="INFO", anchor=CENTER) lbl_nom_radio.config(bg="white", fg="gray") lbl_nom_radio.place(width=200, height=200, x=50, y=50) # Position d'origine du menu x_menu = 0 y_menu = 240 y_menu = 290 # définition d'un style commun à tous les boutons style = ttk.Style() style.configure("BW.TLabel", foreground="black", background="#D9D9D9") style.configure("BW.TLabel", foreground="black", background=bg_color) # affichage des boutons de commande : back, pause, play, stop, forward btn_back = ttk.Button(menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_back = ttk.Button(self.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_play = ttk.Button(menu, image=self.icon_pause, text="Pause", command=self.radio_pause, style="BW.TLabel") btn_play = ttk.Button(self.menu, image=self.icon_pause, text="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(menu, image=self.icon_play, text="Play", command=self.radio_play, style="BW.TLabel") btn_pause = ttk.Button(self.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_stop = ttk.Button(menu, image=self.icon_stop, text="Stop", command=self.radio_stop, style="BW.TLabel") btn_stop = ttk.Button(self.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_forward = ttk.Button(menu, image=self.icon_forward, text="Forward", command=None, style="BW.TLabel") btn_forward = ttk.Button(self.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) # potentiomètre de volume Chargement en cours @@ -73,28 +82,24 @@ class Pupitre: volume_init = lecture.read() lecture.close() # - affichage du potentiomètre de volume vol_potar = Scale(menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", command=self.volume) vol_potar = Scale(self.menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", command=self.volume, bg=bg_color, highlightthickness=0) vol_potar.set(volume_init) vol_potar.place(x=x_menu + 30, y=y_menu + 40) # boutons de coupure et rétablissement du son self.btn_mute = ttk.Button(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") self.btn_mute.place(width=40, height=32, x=x_menu + 245, y=y_menu + 70) # 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) 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='utf8') as radios_file: 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 zone des logos # 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 Chargement en cours @@ -109,10 +114,10 @@ class Pupitre: self.logo[num_radio] = tk.PhotoImage(file="images/blank.png") # création du bouton avec le logo de la radio btn_logo = tk.Button(self.zone_logos, image=self.logo[num_radio]) # utilisation de la fonction 'lambda' indexée sur la position du logo 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']: self.radio_flux(flux)) # <<< fonction à préciser command=lambda flux=radios_list[num_radio]['Url']: self.radio_flux(flux)) btn_logo.place(width=100, height=100, x=x_logo * 100, y=y_logo * 100) def switch_sound(self): Chargement en cours @@ -128,5 +133,11 @@ class Pupitre: self.btn_mute.config(image=self.icon_sound) # affichage "logo sound on" 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): self.root.mainloop()
webradiopi.cfg +1 −1 Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff 86 No newline at end of file 90 No newline at end of file