0
自學PyQt5,我想寫一個播放網站上的視頻鏈接的程序。由於QT Designer沒有視頻小部件,我不得不找到自己的其他人寫的,並將其導入到我的程序中。我正在導入的完整代碼可以在HERE找到。此視頻窗口小部件窗口是在選擇視頻後打開的第二個窗口。PyQt5發送一個信號給QMediaPlayer
我想要做的是在播放列表索引更改時更改視頻窗口的標題。似乎我應該能夠做到這一點:self.playlist.currentIndexChanged.connect(self.dialog.setWindowTitle('Changed!'))
但我遇到的問題是,因爲我導入打開視頻小部件的類/代碼,我無法弄清楚如何觀察信號。
這裏是我的功能:
def play_all_replays(self):
"""
creates a QMediaPlaylist object and inserts all the games replays (in order) to the playlist
and then plays it.
:return:
"""
self.dialog = videowidget.VideoPlayer() # this is the video player widget I import
self.playlist = QMediaPlaylist() # the playlist
self.dialog.mediaPlayer.setPlaylist(self.playlist) #mediaplay is the QMediaPlayer created in videowidget()
for v in self.single_game_highlights_ordered:
url = QUrl(v)
self.playlist.addMedia(QMediaContent(url))
self.dialog.mediaPlayer.setPlaylist(self.playlist)
self.playlist.setCurrentIndex(0)
self.dialog.mediaPlayer.play()
self.dialog.setWindowTitle('MLB Replay - {}')
self.dialog.show()
self.playlist.currentIndexChanged.connect(self.dialog.setWindowTitle('Changed!'))
所以我有種迷失在這裏。我如何觀察這個信號變化,然後將它傳遞給我導入的視頻小部件,以便我可以更改窗口標題(或其他內容,例如,如果它是播放列表,則希望啓用「下一個」按鈕;或者播放列表中第一個視頻播放後的「上一個」按鈕)?
衛生署,我想我想通了。我無法使用'self.dialog.setWindowTitle('Changed!')'self.playlist.currentIndexChanged.connect'。相反,我需要創建一個函數來處理信號(就像我對程序中的其他信號所做的那樣)並將'setWindowTitle'放在那裏。這樣做,它的工作原理。疲憊的眼睛和大腦我猜。 – Bahnzo
或者:connect(lambda:self.dialog.setWindowTitle('Changed!'))' – ekhumoro
既然你已經自己解決了這個問題,請考慮刪除你的問題。如果你認爲未來的讀者可以從中受益,那麼請添加你自己的答案。 –