PyQt5 - Return 当前播放来自 QMediaPlaylist currentMedia() 函数的媒体名称
PyQt5 - Return currently playing media name from QMediaPlaylist currentMedia() function
我在函数中有这段代码:
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())
正在打印 returns
<PyQt5.QtMultimedia.QMediaContent object at 0x109458cf8>
并试图在状态栏中显示它 return 错误:
TypeError: showMessage(self, str, msecs: int = 0): argument 1 has unexpected type 'QMediaContent'
如何让程序return将播放列表中当前播放的文件名或歌曲名作为字符串放到状态栏中?对不起,如果这是一个愚蠢的问题,我还在学习 PyQt。
关于你的错误,回溯说明一切:
argument 1 has unexpected type 'QMediaContent'
looking at the documentation我们看到了
void QStatusBar::showMessage(const QString &message, int timeout = 0)
它期望 QString
或 python 中的 str
-> 构建一个字符串:
self.statusBar().showMessage(str(self.playlist.currentMedia()))
但是等等,他们还有更多!
您知道吗,您不需要 lambda-function 来连接您的函数:
self.playlist.currentMediaChanged.connect(self.songChanged) # <- no brackets
还有currentMediaChanged
does provide the current QMediaContent
- docs:
void QMediaPlayer::currentMediaChanged(const QMediaContent &media)
意味着你可以让你的 songChanged
-function 小一点:
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()))
您不必将评估的函数连接到信号,只需连接函数的名称。 currentMediaChanged
信号 returns 当前 QMediaContent
,然后你必须使用那个 QMediaContent
并得到 QUrl
,然后正如我在 [=15= 中展示的那样] 我们得到以下信息:
self.playlist.currentMediaChanged.connect(self.songChanged)
def songChanged(self, media):
if not media.isNull():
url = media.canonicalUrl()
self.statusBar().showMessage(url.fileName())
我在函数中有这段代码:
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())
正在打印 returns
<PyQt5.QtMultimedia.QMediaContent object at 0x109458cf8>
并试图在状态栏中显示它 return 错误:
TypeError: showMessage(self, str, msecs: int = 0): argument 1 has unexpected type 'QMediaContent'
如何让程序return将播放列表中当前播放的文件名或歌曲名作为字符串放到状态栏中?对不起,如果这是一个愚蠢的问题,我还在学习 PyQt。
关于你的错误,回溯说明一切:
argument 1 has unexpected type 'QMediaContent'
looking at the documentation我们看到了
void QStatusBar::showMessage(const QString &message, int timeout = 0)
它期望 QString
或 python 中的 str
-> 构建一个字符串:
self.statusBar().showMessage(str(self.playlist.currentMedia()))
但是等等,他们还有更多!
您知道吗,您不需要 lambda-function 来连接您的函数:
self.playlist.currentMediaChanged.connect(self.songChanged) # <- no brackets
还有currentMediaChanged
does provide the current QMediaContent
- docs:
void QMediaPlayer::currentMediaChanged(const QMediaContent &media)
意味着你可以让你的 songChanged
-function 小一点:
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()))
您不必将评估的函数连接到信号,只需连接函数的名称。 currentMediaChanged
信号 returns 当前 QMediaContent
,然后你必须使用那个 QMediaContent
并得到 QUrl
,然后正如我在 [=15= 中展示的那样] 我们得到以下信息:
self.playlist.currentMediaChanged.connect(self.songChanged)
def songChanged(self, media):
if not media.isNull():
url = media.canonicalUrl()
self.statusBar().showMessage(url.fileName())