Python PyQt5-从QMediaPlaylist currentMedia()函数返回当前正在播放的媒体名称

Python PyQt5-从QMediaPlaylist currentMedia()函数返回当前正在播放的媒体名称,python,pyqt,pyqt5,qmediaplayer,qmediacontent,Python,Pyqt,Pyqt5,Qmediaplayer,Qmediacontent,我在函数中有以下代码: self.playlist.currentMediaChanged.connect(lambda: self.songChanged()) def songChanged(self): if self.playlist.mediaCount != 0: print(QMediaContent(self.playlist.currentMedia())) self.statusBar().showMessage(self.playl

我在函数中有以下代码:

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())
self.playlist.currentMediaChanged.connect(self.songChanged) # <- no brackets
它调用这个函数:

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())
self.playlist.currentMediaChanged.connect(self.songChanged) # <- no brackets
打印它返回

<PyQt5.QtMultimedia.QMediaContent object at 0x109458cf8>

如何让程序将播放列表中当前播放的文件名或歌曲标题作为字符串返回到状态栏中?抱歉,如果这是一个愚蠢的问题,我仍在学习PyQt。

关于您的错误,回溯说明了一切:

参数1具有意外的类型“QMediaContent”

我们看到

它需要python中的
QString
或简单的
str
->构建字符串:

self.statusBar().showMessage(str(self.playlist.currentMedia()))

但是等一下,他们的更重要
您是否知道不需要lambda函数来连接函数:

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())
self.playlist.currentMediaChanged.connect(self.songChanged) # <- no brackets
这意味着您可以将您的
歌曲更改
-功能缩小一点:

def songChanged(self, media):
  if media:
    print(media)
    self.statusBar().showMessage(str(media))

要从对象获取文件名,可以使用:
media.canonicalUrl().fileName()


您不必将计算的函数连接到信号,只需连接函数的名称。
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())

谢谢你指出我不需要羔羊,我太傻了。我应用了您的更改,但状态栏显示:如何更改它以使其显示文件名而不是对象?@chaNcharge:use
str(media.canonicalUrl().fileName())
在PyQt5中不必使用str(),默认情况下,所有QString都映射到str。@eyllanesc,thx——我对此不确定——因为python类型似乎与qt类型一起存在。所以我总是在可能的情况下转换类型。