標籤:phonon音樂播放器 pyqt phonon案例 phonon分析
之前一直在windows上測試Phonon代碼,剛剛回來用linux居然提示我沒有Phonon模組
我使用的發行版是內建pyqt4的,但是不帶Phonon模組,其實也說的通,Phonon本身也不是Qt的項目,詳細請百度 sorry 是Google
我用的ubuntu系列,安裝Phonon模組方法如下:
sudo apt-get install python-qt4-phonon
其他版本請使用yum install **** 或下載原始碼自行編譯安裝
下面這個簡單的例子,道出了Phonon基本使用之道,例子非常清晰易懂
#coding=utf-8from PyQt4 import QtGui, QtCorefrom PyQt4.phonon import Phononclass Window(QtGui.QPushButton): def __init__(self): QtGui.QPushButton.__init__(self, 'Choose File') #將一個按鈕作為主視窗,誰說不可以。你試試 self.mediaObject = Phonon.MediaObject(self) #執行個體化一個媒體對象 self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self) #執行個體化音訊輸出 Phonon.createPath(self.mediaObject, self.audioOutput) #將上面的媒體對象作為音頻來源並對接到音訊輸出 self.mediaObject.stateChanged.connect(self.handleStateChanged) #播放狀態改變觸發事件 self.clicked.connect(self.handleButton) #單擊按鈕事件 def handleButton(self): #按下按鈕後檢測當前的播放狀態,如果為播放狀態,那麼停止 if self.mediaObject.state() == Phonon.PlayingState: self.mediaObject.stop() else: #如果狀態本身就是停止的那麼就開啟檔案對話方塊選擇媒體 path = QtGui.QFileDialog.getOpenFileName(self, self.text()) #第二個參數是設定開啟檔案對話方塊預設在當前工作目錄 if path: self.mediaObject.setCurrentSource(Phonon.MediaSource(path)) #把這個檔案放到當前的播放隊列的第一個位置(這個位置不是我們看到的列表裡面的位置,而是播放位置) self.mediaObject.play() #開始播放 def handleStateChanged(self, newstate, oldstate): #當播放狀態該表時觸發這個函數 if newstate == Phonon.PlayingState: #檢查播放狀態 self.setText('Stop') elif newstate == Phonon.StoppedState: self.setText('Choose File') elif newstate == Phonon.ErrorState: #判斷播放異常,這個很實用 source = self.mediaObject.currentSource().fileName() #拋出播放出錯的檔案名稱 print 'ERROR: could not play:', source.toLocal8Bit().data()if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) app.setApplicationName('Phonon') win = Window() win.resize(200, 100) win.show() sys.exit(app.exec_())請對比我上一篇的例子,細細品味一下兩者使用完全不同的兩個類,而這種方式才是核心,上一篇的例子算是拋簪引玉,
這篇例子說明了phonon的基本使用之道,更深刻的例子在接下來的文章中咱們繼續分析
PyQt Phonon 模組初探