我在函数中有这段代码:
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。
答案 0 :(得分:1)
关于你的错误,追溯表示everthing:
我们看到参数1具有意外类型'QMediaContent'
void QStatusBar::showMessage(const QString &message, int timeout = 0)
它希望python中的QString
或简称str
- &gt;构建一个字符串:
self.statusBar().showMessage(str(self.playlist.currentMedia()))
但等等,他们更多!
您是否知道您不需要lambda函数来连接您的函数:
self.playlist.currentMediaChanged.connect(self.songChanged) # <- no brackets
也currentMediaChanged
does provide the current QMediaContent
- docs:
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()))
答案 1 :(得分:1)
您不必将评估的函数连接到信号,只需将函数的名称连接起来。 currentMediaChanged
信号会返回当前QMediaContent
,然后您必须使用QMediaContent
并获取QUrl
,然后正如我在previous answer中显示的那样,我们得到了以下内容:
self.playlist.currentMediaChanged.connect(self.songChanged)
def songChanged(self, media):
if not media.isNull():
url = media.canonicalUrl()
self.statusBar().showMessage(url.fileName())