Ο κώδικάς του είναι αυτός:
- Κώδικας: Επιλογή όλων
from PyQt5 import QtWidgets, QtMultimedia, QtXml, QtGui, QtCore
class RadioWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(RadioWidget, self).__init__(parent)
self.setFixedSize(220, 100)
self.setStyleSheet("background-color: #d4e8ed;")
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.move(1535, 350)
self.play_button = QtWidgets.QRadioButton(self)
self.play_button.setGeometry(10, 10, 70, 70)
self.play_button.setIconSize(QtCore.QSize(64, 64))
self.play_button.setChecked(False)
self.play_button.setStyleSheet("QRadioButton::indicator {width: 0px; height: 0px;}")
self.play_button.setToolTip("Κάνε κλικ για αναπαραγωγή/παύση")
self.station_combo = QtWidgets.QComboBox(self)
self.station_combo.setGeometry(90, 18, 128, 48)
self.station_combo.setIconSize(QtCore.QSize(128, 48))
self.station_combo.setStyleSheet("QComboBox::down-arrow {width: 0px; height: 0px;}")
self.station_combo.setStyleSheet(
"""
QComboBox {
background-color: #c3c3c3;
border: 1px solid #c3c3c3;
border-radius: 10px;
}
QComboBox:hover {
background-color: #e6f9ff;
border: 1px solid #000000;
}
"""
)
self.station_combo.setToolTip("Επιλογή σταθμού αναπαραγωγής")
# Προσθήκη των στοιχείων στο QComboBox με χρήση QStandardItemModel
self.model = QtGui.QStandardItemModel(self)
self.station_combo.setModel(self.model)
self.media_player = QtMultimedia.QMediaPlayer(self)
self.read_stations() # Καλεί τη μέθοδο για τη φόρτωση των σταθμών
self.connect_signals()
self.set_up_ui()
def read_stations(self):
dom = QtXml.QDomDocument()
file = QtCore.QFile("stations.xml")
file.open(QtCore.QIODevice.ReadOnly)
dom.setContent(file)
file.close()
root = dom.documentElement()
items = root.elementsByTagName("item")
# Αδειάστε το QComboBox πριν την αρχικοποίηση
self.station_combo.clear()
for i in range(items.count()):
item = items.item(i).toElement()
label = item.attribute("label")
id = item.attribute("id")
url = QtCore.QUrl(id) # Αφαιρέστε τη γραμμή αυτή, έτσι ώστε να μην αφαιρείται το πρωτόκολλο
# Προσθήκη στοιχείου στο QComboBox
self.station_combo.addItem(label, url)
def connect_signals(self):
self.play_button.toggled.connect(self.play_or_stop)
self.station_combo.currentIndexChanged.connect(self.change_station)
def set_up_ui(self):
self.play_button.setIcon(QtGui.QIcon("play1.png"))
@QtCore.pyqtSlot(int)
def change_station(self, index):
station_url = self.station_combo.currentData()
print(f"Selected station: {self.station_combo.currentText()}, URL: {station_url}")
media_content = QtMultimedia.QMediaContent(station_url)
self.media_player.setMedia(media_content)
self.play_or_stop(True) # Ξεκινήστε αυτόματα την αναπαραγωγή όταν επιλέγετε νέο σταθμό
@QtCore.pyqtSlot(bool)
def play_or_stop(self, checked):
if checked:
self.play_button.setIcon(QtGui.QIcon("stop1.png"))
url = self.station_combo.currentData()
media_content = QtMultimedia.QMediaContent(url)
self.media_player.setMedia(media_content)
self.media_player.play()
else:
self.play_button.setIcon(QtGui.QIcon("play1.png"))
self.media_player.stop()
if __name__ == "__main__":
app = QtWidgets.QApplication([])
radio_widget = RadioWidget()
radio_widget.show()
app.exec_()
Για να τρέξει σε kubuntu έπρεπε να δημιουργήσω ένα εικονικό περιβάλλον που λέγεται venv. Σε άλλη διανομή που έχω (Ubuntu με mate) δεν χρειάστηκε το venv.
Εξηγούμαι.
Για να τρέξει ο κώδικας πρέπει να εγκατασταθούν κάποιες βιβλιοθήκες python με το pip install.
Αυτό στην ubuntu mate μπορώ να το κάνω. Εϊναι η έκδοση 22.04. Ενώ στην kubuntu που είναι 23.04 δεν μπορώ. Ο λόγος αν κατάλαβα καλά
είναι κάποιες πολιτικές που άλλαξαν. Δεν με αφήνει να δώσω pip install. Με αφήνει μόνο μέσα από το venv περιβάλλον που είπα πριν.
Αυτό το περιβάλλον τοι στήνω στο ίδιο φάκελο που έχω και τον κώδικα του ραδιοφώνου. Επειδή ο κώδικας προστάζει να φορτωθούν κάποιες βιβλιοθήκες, αυτές θα είναι σε κάποιον φάκελο μέσα σε αυτόν το φάκελο του ραδιοφώνου όπως είπα.
Για παράδειγμα, το αρχείο του κώδικα λέγεται radio.py ( όπως θέλουμε το ονομάζουμε, αρκεί να έχει την κατάληξη " .py " )
Και το radio.py βρίσκεται στο φάκελο /home/user/scripts/radio. Ε στον ίδιο αυτό φάκελο βρίσκεται και ο φάκελος του εικονικού περιβάλλοντος.
Εγώ τον ονόμασα " radio-venv ". Για να δημιουργηθεί έδωσα εντολές στο τερματικό
- Κώδικας: Επιλογή όλων
cd scripts/radio
python3 -m venv radio-venv
και τσουπ... δημιουργήθηκε ο φάκελος αυτόματα με όλα τα αρχεία τα υπέυθυνα για το εικονικό περιβάλλον που λέμε.
Μετά από αυτό δίνω την εντολή
- Κώδικας: Επιλογή όλων
source radio-venv/bin/activate
και βλέπω τότε ότι εκεί που το τερματικό συνήθως δείχει αυτό πριν από το δρομέα
- Κώδικας: Επιλογή όλων
user@pc:~/scripts/radio$
τώρα δείχνει αυτό, που είναι και ένδειξη ότι είμαι στο εικονικό αυτό περιβάλλον
- Κώδικας: Επιλογή όλων
(radio-venv) user@pc:~/scripts/radio$
Εδώ θα δώσω τώρα κάποια pip install
- Κώδικας: Επιλογή όλων
pip install PyQt5 sounddevice soundfile
pip install pyaudio
και σίγουρα τώρα δεν θυμάμαι ποιες ακριβώς εντολές έδωσα ώστε να εγκατασταθούν βιβλιοθήκες. Αν λείπει καμία απλά θα μας ενημερώσει το τερματικό όταν θα δώσουμε την εντολή για να τρέξει το πρόγραμμα.
- Κώδικας: Επιλογή όλων
python3 radio.py
(Αν κάποιος γνώστης που διαβάζει τώρα και δεν βαριέται να συμμετέχει ας δει στην αρχή του κώδικα το ποιες βιβλιοθήκες φορτώνονται κι ας συμπληρώσει τι χρειάζεται ακόμα)
Λείεπει όμως κάτι ακόμα.
Στον φάκελο που έχω τον κώδικα του radio.py υπάρχει κι ένα ακόμα αρχείο εκτός από το radio.py. Αυτό λέγεται stations.xml. Περιέχει μέσα τις διευθύνσεις (τα url) των σταθμών που θα παίζουν. Απλά ανοίγω ένα νέο έγγραφο με σεξί κλικ και "Δημιουργία εγγράφου" (ή "Νέο αρχείο" ή κάτι τέτοιο, ξέρετε). Εκεί μέσα φράφω αυτές τις γραμμές όπως φαίνονται
- Κώδικας: Επιλογή όλων
<menu>
<item label="Kiss FM" id="http://kissfm.live24.gr/kiss2111? Kiss FM"/>
<item label="Love Radio" id="http://loveradio.live24.gr/loveradio-1000? Love Radio"/>
<item label="Galaxy 92" id="http://galaxy.live24.gr/galaxy9292? Galaxy 92"/>
<item label="Nitro Radio" id="http://nitro.live24.gr/nitro4555? Nitro Radio"/>
<item label="Orange" id="http://orange.live24.gr/orange9320? Orange"/>
<item label="Rock FM" id="https://az10.yesstreaming.net:8060/radio.mp3? Rock FM"/>
<item label="Αθήνα 98.4" id="http://athina984.live24.gr/athina984? Αθήνα 984"/>
<item label="Real FM" id="http://realfm2.live24.gr/realfm? Real FM"/>
<item label="Σφαίρα" id="https://sfera.live24.gr/sfera4132? Σφαίρα"/>
<item label="Ρυθμός 94.9" id="https://rythmos.live24.gr/rythmos? Ρυθμός 949"/>
<item label="Voice 102.5" id="https://nitro.live24.gr/nitro4555? Voice 102.5"/>
<item label="Rebel 105.2" id="https://netradio.live24.gr/rebel1052? Rebel 105.2"/>
<item label="MAD" id="http://mediaserver.mad.tv/stream? MAD"/>
<item label="ΕΡΤ Πρώτο" id="https://radiostreaming.ert.gr/ert-proto? ΕΡΤ Πρώτο"/>
<item label="Κόντρα chanel" id="https://netradio.live24.gr/kontratv? Κόντρα chanel"/>
<item label="Radio Gold" id="http://broadcast.hol.gr/radiogold? Radio Gold"/>
<item label="Στο Κόκκινο" id="http://n05.radiojar.com/red-source? Στο Κόκκινο"/>
</menu>
και είναι έτοιμο.
Αλλά ΌΧΙ... λείπουν τα κουμπιά!
Στον ίδιο φάκελο λοιπόν έχωαυτά τα κουμπιά (που τα ζήτησα να μου τα φτιάξει τεχνητή νοημοσύνη. Ήθελα κάτι σε ασημί φουτουριστικό και δεν έβρισκα στην αναζήτηση του google)


down-pointing small red triangle smileys
Μπορεί όμως όποιος θέλει να βρει ό,τι του αρέσει.
Αυτό είναι όλο.


Ευχαριστώ που το διαβάσατε και ευχαριστώ που μου δίνεται η ευκαιρία να εκφραστώ. Όσο να ναι ικανοποίησα κάποια ανάγκη μου και είμαι ευγνώμων.