标签:phonon音乐播放器 pyqt phonon案例 phonon分析
之前一直在windows上测试Phonon代码,刚刚回来用linux居然提示我没有Phonon模块
我使用的发行版是自带pyqt4的,但是不带Phonon模块,其实也说的通,Phonon本身也不是Qt的项目,详细请百度 sorry 是谷歌
我用的ubuntu系列,安装Phonon模块方法如下:
sudo apt-get install python-qt4-phonon
其他版本请使用yum install **** 或下载源代码自行编译安装
下面这个简单的例子,道出了Phonon基本使用之道,例子非常清晰易懂
#coding=utf-8 from PyQt4 import QtGui, QtCore from PyQt4.phonon import Phonon class 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的基本使用之道,更深刻的例子在接下来的文章中咱们继续分析
标签:phonon音乐播放器 pyqt phonon案例 phonon分析
原文地址:http://blog.csdn.net/jiecooner/article/details/42011695