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
9bd67245
Commit
9bd67245
authored
Jan 28, 2023
by
Thorfin89
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Boutons défilements pages posés
parent
58539f5f
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
62 additions
and
20 deletions
+62
-20
README.md
README.md
+4
-0
radios.csv
data/radios.csv
+13
-0
pageb.png
icons/pageb.png
+0
-0
pagef.png
icons/pagef.png
+0
-0
main.py
main.py
+1
-1
pupitre.py
pupitre.py
+43
-18
webradiopi.cfg
webradiopi.cfg
+1
-1
No files found.
README.md
View file @
9bd67245
...
@@ -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 :
...
...
data/radios.csv
View file @
9bd67245
...
@@ -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
icons/pageb.png
0 → 100644
View file @
9bd67245
9.01 KB
icons/pagef.png
0 → 100644
View file @
9bd67245
9.14 KB
main.py
View file @
9bd67245
...
@@ -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
):
...
...
pupitre.py
View file @
9bd67245
...
@@ -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
=
"4
0
0"
,
x
=
501
,
y
=
0
)
self
.
menu
.
place
(
width
=
"300"
,
height
=
"4
8
0"
,
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
=
"
8
00"
,
height
=
"80"
,
x
=
0
,
y
=
400
)
self
.
bandeau
.
place
(
width
=
"
5
00"
,
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 d
u menu
boutons
# Position d'origine d
e la barre de
boutons
x_menu
=
0
x_menu
=
0
y_menu
=
29
0
y_menu
=
32
0
# 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
+
4
0
)
vol_potar
.
place
(
x
=
x_menu
+
50
,
y
=
y_menu
+
5
0
)
# 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
()
webradiopi.cfg
View file @
9bd67245
70
53
\ No newline at end of file
\ 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