2016-03-22 11 views
0

Kendimi öğretme PyQt5, Bir web sitesinde bulunan video bağlantısını yapan bir program yazmak istedim. QT Designer'ın bir video widget'ına sahip olmadığı için, başka birinin yazdığını ve programıma aktardığımı kendi bulmam gerekiyordu. İçe aktardığım kodun tamamını HERE bulabilirsiniz. Bu video widget penceresi, video seçildikten sonra açılan 2. bir penceredir.PyQt5 QMediaPlayer'a bir sinyal gönderiliyor

Çalmaya çalıştığım şey, oynatma listesi dizini değiştiğinde video penceresinin başlığını değiştirmektir. Şununla yapabilmem mümkün görünüyor: self.playlist.currentIndexChanged.connect(self.dialog.setWindowTitle('Changed!')) ama sorun şu ki, video widget'ını açan sınıf/kodu içe aktardığımdan, sinyalin nasıl izleneceğini anlayamıyorum.

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!')) 

yüzden tür burada kayboldum:

İşte benim fonksiyondur. Bu sinyal değişikliğini nasıl izlerim ve daha sonra içe aktardığım video widget'ına aktarırım, böylece pencere başlığını değiştirebilirim (ya da bir çalma listesi ise "sonraki" düğmesini etkinleştirmek istiyorum gibi başka şeyler), veya çalma listesindeki ilk videodan sonra "önceki" düğmesi oynatıldı)?

+1

Doh ve ben bunu anladım düşünüyorum. Self.playlist.currentIndexChanged.connect 'ile self.dialog.setWindowTitle ('Değiştirildi!')' Özelliğini kullanamıyorum. Bunun yerine, sinyali işlemek için bir fonksiyon yaratmam gerekiyordu (programımdaki diğer her sinyalde yaptığım gibi) Ve setWindowTitle'ı buraya koydu. Bunu yapmak işe yarıyor. Yorgun gözler ve beyin sanırım. – Bahnzo

+0

Veya: 'connect (lambda: self.dialog.setWindowTitle ('Değiştirildi!'))' – ekhumoro

+0

Sorunu kendiniz çözdüğünüzden, lütfen sorunuzu silmeyi düşünün. Gelecek okuyucuların bundan yararlanabileceğini düşünüyorsanız, lütfen kendi yanıtınızı ekleyin. –

cevap

0

İşte çözüm. o zaman bu işlevini çağırır

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

: işlevin son satırı değiştirin

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