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
21ee259d
Commit
21ee259d
authored
Jan 19, 2023
by
Thorfin89
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Mise à jour de la doc
parent
a999bdb6
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
66 additions
and
46 deletions
+66
-46
WebRadioPi.png
dcts/images/WebRadioPi.png
+0
-0
pupitre.py
pupitre.py
+65
-45
webradiopi.cfg
webradiopi.cfg
+1
-1
No files found.
dcts/images/WebRadioPi.png
View replaced file @
a999bdb6
View file @
21ee259d
163 KB
|
W:
|
H:
188 KB
|
W:
|
H:
2-up
Swipe
Onion skin
pupitre.py
View file @
21ee259d
...
@@ -4,10 +4,11 @@
...
@@ -4,10 +4,11 @@
# import ----------------------------------
# import ----------------------------------
import
tkinter
as
tk
import
tkinter
as
tk
from
tkinter
import
ttk
,
Scale
,
HORIZONTAL
,
CENTER
,
LEFT
,
RIGHT
,
TOP
from
tkinter
import
ttk
,
Scale
,
HORIZONTAL
,
CENTER
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 ---------------------------------
...
@@ -18,7 +19,7 @@ class Pupitre:
...
@@ -18,7 +19,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
)
# <
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
# images des boutons
self
.
icon_back
=
tk
.
PhotoImage
(
file
=
"icons/back.png"
)
self
.
icon_back
=
tk
.
PhotoImage
(
file
=
"icons/back.png"
)
...
@@ -29,43 +30,51 @@ class Pupitre:
...
@@ -29,43 +30,51 @@ 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
.
logox
=
tk
.
PhotoImage
(
file
=
"images/radio.png"
)
self
.
zones
()
# affichage des 3 zones
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
self
.
zones
()
self
.
radios_display
()
# noinspection PyTypeChecker
def
zones
(
self
):
def
zones
(
self
):
# fenêtre contenant la mosaïque de logos des radios > dim 500x400
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
)
# fenêtre Haute : Titre / Menu > dim 800x80
# fenêtre Haute : Titre / Menu > dim 800x80
bandeau
=
tk
.
Frame
(
self
.
root
,
width
=
"800"
,
height
=
"80"
,
bg
=
'gray'
)
self
.
bandeau
=
tk
.
Frame
(
self
.
root
,
bg
=
'gray'
)
bandeau
.
pack
(
side
=
TOP
,
expand
=
'True'
)
self
.
bandeau
.
place
(
width
=
"800"
,
height
=
"80"
,
x
=
0
,
y
=
400
)
# fenêtre contenant les boutons (logos) des radios > dim 500x400
def
boutons
(
self
):
self
.
zone_logos
=
tk
.
Frame
(
self
.
root
,
width
=
"500"
,
height
=
"400"
,
bg
=
'black'
)
self
.
zone_logos
.
pack
(
side
=
LEFT
,
expand
=
'True'
)
# fenêtre d'affichage de la radio en cours de lecture et des boutons de commande > dim 300x400
# affiche du logo de la radio sélectionnée >>> placer ici l'icone de la radio en 200x200
menu
=
tk
.
Frame
(
self
.
root
,
width
=
"300"
,
height
=
"400"
,
bg
=
"#D9D9D9"
)
self
.
lbl_radio_selected
=
ttk
.
Label
(
self
.
menu
)
menu
.
pack
(
side
=
RIGHT
,
expand
=
'True'
)
# self.lbl_radio_selected.config(bg="lightgray", fg="black")
self
.
lbl_radio_selected
.
place
(
width
=
225
,
height
=
225
,
x
=
38
,
y
=
38
)
# Position d'origine du menu
# Position d'origine du menu
boutons
x_menu
=
0
x_menu
=
0
y_menu
=
2
4
0
y_menu
=
2
9
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
=
"#D9D9D9"
)
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
(
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_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_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_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_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
)
btn_forward
.
place
(
width
=
48
,
height
=
32
,
x
=
x_menu
+
225
,
y
=
y_menu
+
0
)
# potentiomètre de volume
# potentiomètre de volume
...
@@ -74,28 +83,24 @@ class Pupitre:
...
@@ -74,28 +83,24 @@ 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
(
menu
,
from_
=
0
,
to
=
100
,
tickinterval
=
20
,
orient
=
HORIZONTAL
,
length
=
200
,
label
=
"Volume"
,
vol_potar
=
Scale
(
self
.
menu
,
from_
=
0
,
to
=
100
,
tickinterval
=
20
,
orient
=
HORIZONTAL
,
command
=
self
.
volume
)
length
=
190
,
label
=
"Volume"
,
command
=
self
.
volume
,
bg
=
bg_color
,
highlightthickness
=
0
)
vol_potar
.
set
(
volume_init
)
vol_potar
.
set
(
volume_init
)
vol_potar
.
place
(
x
=
x_menu
+
3
0
,
y
=
y_menu
+
40
)
vol_potar
.
place
(
x
=
x_menu
+
5
0
,
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
(
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
=
40
,
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
+
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
=
[
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
,
""
]
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
zone des
logos
# boucles de remplissage de la
mosaïque de
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
...
@@ -106,27 +111,42 @@ class Pupitre:
...
@@ -106,27 +111,42 @@ 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
self
.
logo
[
num_radio
]
=
tk
.
PhotoImage
(
file
=
"images/blank.png"
)
pass
# création du bouton avec le logo de la radio
def
radio_selected
(
self
,
flux
,
num_radio
):
btn_logo
=
tk
.
Button
(
self
.
zone_logos
,
image
=
self
.
logo
[
num_radio
])
self
.
radio_flux
(
flux
)
# utilisation de la fonction 'lambda' indexée sur la position du logo
# affichage de la radio sélectionnée
btn_logo
.
config
(
command
=
lambda
x
=
x_logo
,
y
=
y_logo
:
print
(
x
+
y
*
5
+
1
))
# <<< fonction à préciser
with
open
(
"./data/radios.csv"
,
'r'
,
encoding
=
'utf8'
)
as
radios_file
:
btn_logo
.
place
(
width
=
100
,
height
=
100
,
x
=
x_logo
*
100
,
y
=
y_logo
*
100
)
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
)
def
switch_sound
(
self
):
def
switch_sound
(
self
):
# bascule on/off du son
# bascule on/off du son
global
mute
global
mute
if
not
mute
:
if
not
mute
:
self
.
radio_
mute
()
self
.
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
.
radio_sound
()
self
.
unmute
()
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
()
webradiopi.cfg
View file @
21ee259d
90
36
\ 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