2016-03-22 87 views
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!')) 

所以我有種迷失在這裏。我如何觀察這個信號變化,然後將它傳遞給我導入的視頻小部件,以便我可以更改窗口標題(或其他內容,例如,如果它是播放列表,則希望啓用「下一個」按鈕;或者播放列表中第一個視頻播放後的「上一個」按鈕)?

+1

衛生署,我想我想通了。我無法使用'self.dialog.setWindowTitle('Changed!')'self.playlist.currentIndexChanged.connect'。相反,我需要創建一個函數來處理信號(就像我對程序中的其他信號所做的那樣)並將'setWindowTitle'放在那裏。這樣做,它的工作原理。疲憊的眼睛和大腦我猜。 – Bahnzo

+0

或者:connect(lambda:self.dialog.setWindowTitle('Changed!'))' – ekhumoro

+0

既然你已經自己解決了這個問題,請考慮刪除你的問題。如果你認爲未來的讀者可以從中受益,那麼請添加你自己的答案。 –

回答

0

下面是解決方案。該函數的最後一行更改爲:

self.playlist.currentIndexChanged.connect(self.playlist_changed) 

,然後調用這個函數:

def playlist_changed(self): 
     num = self.playlist.currentIndex() # gets current playlist index 
     self.dialog.setWindowTitle('MLB Replay - {}'.format(self.replay_window.item(num).text()))