Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
W
WebRadioPi
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Thorfin89
WebRadioPi
Commits
c0cf63a3
Commit
c0cf63a3
authored
Jan 24, 2023
by
Thorfin89
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Optimisation du code. Programmation des fonctions radio avant et arrière.
parent
4fa0d370
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
57 additions
and
39 deletions
+57
-39
pupitre.py
pupitre.py
+56
-38
webradiopi.cfg
webradiopi.cfg
+1
-1
No files found.
pupitre.py
View file @
c0cf63a3
...
...
@@ -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 '
\ufeff
Nom'
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,44 +110,48 @@ 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
num_radio
=
y_logo
*
5
+
x_logo
# indexation du numéro de radio
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
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
pass
def
radio_selected
(
self
,
flux
,
num_radio
):
self
.
radio_flux
(
flux
)
# 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
num_radio
=
y_logo
*
5
+
x_logo
# indexation du numéro de radio
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
:
# 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
(
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
pass
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
...
...
webradiopi.cfg
View file @
c0cf63a3
28
\ No newline at end of file
72
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment