標籤:pyqt phonon pyqt音樂播放
現在網上關於PyQt的文章不多,話說那個官方文檔也是爛的一塌糊塗,初次使用Phonon模組遇到很多疑問,
國外網站相關的資料多些,看到一些好的例子記錄下來,主要是注釋了一下,給後來者一些提示。
# -*- coding: utf-8 -*-import sysfrom PyQt4 import QtCore, QtGuifrom PyQt4.phonon import Phononclass AudioPlayer(QtGui.QWidget): def __init__(self, url, parent = None): #url參數就是你的MP3地址 self.url = url QtGui.QWidget.__init__(self, parent) #設定一些視窗尺寸的策略,不用設定也會有預設策略,乾脆注釋了,無影響 # self.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Preferred)#建立一個音樂播放器 這是一種簡單的方法,功能自然也是很單一,貌似只能實現簡單的單首歌曲播放(希望我沒有猜錯,),更靈活的是使用AudioOutput,MediaObject等方法實現 self.player = Phonon.createPlayer(Phonon.MusicCategory,Phonon.MediaSource(url)) #下面這句話真沒搞懂,Google了一下 多次嘗試沒反應 乾脆把他注釋了。。不影響程式 # self.player.setTickInterval(100) self.player.tick.connect(self.tock) #播放進度改變觸發事件 self.play_pause = QtGui.QPushButton(self) #播放按鈕 self.play_pause.setIcon(QtGui.QIcon('icons/49heart.svg')) #設定播放按鈕表徵圖,jpg,png都可以 self.play_pause.clicked.connect(self.playClicked) #播放按鈕單擊事件 self.player.stateChanged.connect(self.stateChanged) #播放狀態改變觸發事件 self.slider = Phonon.SeekSlider(self.player , self) #進度條 self.status = QtGui.QLabel(self) #Label組件用來顯示播放的目前時間 self.status.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) #設定Label的對齊 靠左對齊或置中 layout = QtGui.QHBoxLayout(self) #水平布局 layout.addWidget(self.play_pause) #添加播放按鈕 layout.addWidget(self.slider) #添加滑動條 layout.addWidget(self.status) #添加播放狀態 def playClicked(self): if self.player.state() == Phonon.PlayingState: #如果為播放狀態 self.player.pause() #暫停 else: self.player.play() #開始播放 def stateChanged(self, new, old): if new == Phonon.PlayingState: #根據改變後的狀態更換播放表徵圖 self.play_pause.setIcon(QtGui.QIcon('icons/49heart.svg')) else: self.play_pause.setIcon(QtGui.QIcon('icons/49heart.svg')) def tock(self, time): #播放進度改變時用來更新上面Label組件裡面的當前播放時間time參數就是歌曲當前所在的時間刻,流中的媒體對象的當前位置是由時間參數給出 以毫秒為單位 time = time/1000 #除以1000得到秒單位 h = time/3600 #小時 m = (time-3600*h) / 60 #分鐘 s = (time-3600*h-m*60) #秒 self.status.setText('%02d:%02d:%02d'%(h,m,s)) #更新Label顯示的播放時間進度def main(): app = QtGui.QApplication(sys.argv) window=AudioPlayer(sys.argv[1]) #在命令列下的第二個參數 你的歌曲路徑 window.show() #顯示主視窗 sys.exit(app.exec_())if __name__ == "__main__": main()# 測試: python mp3player.py mymusic.mp3
這段代碼實現了單首個點播,嵌入到程式中實現簡單聲音播放還是不錯的,如果要做的更專業,更貼近現代化播放器該有的功能,
接下來幾篇文章中我會介紹一些更靈活的複雜的功能
PyQt Phonon實現音樂播放器