PyQt5 - возвращает имя воспроизводимого в данный момент мультимедиа из функции QMediaPlaylist currentMedia().
У меня есть этот код в функции:
self.playlist.currentMediaChanged.connect(lambda: self.songChanged())
и он вызывает эту функцию:
def songChanged(self):
if self.playlist.mediaCount != 0:
print(QMediaContent(self.playlist.currentMedia()))
self.statusBar().showMessage(self.playlist.currentMedia())
Печать возвращает
<PyQt5.QtMultimedia.QMediaContent object at 0x109458cf8>
И попытка показать это в строке состояния возвращает ошибку:
TypeError: showMessage(self, str, msecs: int = 0): argument 1 has unexpected type 'QMediaContent'
Как я могу заставить программу возвращать имя воспроизводимого в данный момент файла или название песни в списке воспроизведения в виде строки, которую нужно поместить в строку состояния? Извините, если это глупый вопрос, я все еще изучаю PyQt.
2 ответа
Вам не нужно подключать функцию, оцениваемую к сигналу, только имя функции. currentMediaChanged
сигнал возвращает ток QMediaContent
тогда вы должны использовать это QMediaContent
и получить QUrl
и затем, как я показал в моем предыдущем ответе, мы получаем следующее:
self.playlist.currentMediaChanged.connect(self.songChanged)
def songChanged(self, media):
if not media.isNull():
url = media.canonicalUrl()
self.statusBar().showMessage(url.fileName())
Относительно вашей ошибки трассировка говорит все:
Аргумент 1 имеет неожиданный тип 'QMediaContent'
глядя на документацию, которую мы видим
void QStatusBar::showMessage(const QString &message, int timeout = 0)
что он ожидает QString
или просто str
в Python -> построить строку:
self.statusBar().showMessage(str(self.playlist.currentMedia()))
но подождите, их больше!
Знаете ли вы, что вам не нужна лямбда-функция для подключения вашей функции:
self.playlist.currentMediaChanged.connect(self.songChanged) # <- no brackets
также currentMediaChanged
действительно обеспечивает текущий QMediaContent
- документы:
void QMediaPlayer::currentMediaChanged(const QMediaContent &media)
это означает, что вы можете сделать свой songChanged
-функция немного меньше:
def songChanged(self, media):
if media:
print(media)
self.statusBar().showMessage(str(media))
чтобы получить имя файла из объекта, который вы можете использовать: media.canonicalUrl().fileName()
print(media.canonicalUrl().fileName())
self.statusBar().showMessage(str(media.canonicalUrl().fileName()))