PyQt Phonon 模块初探

来源:互联网 发布:mac下的思维导图 编辑:程序博客网 时间:2024/05/16 07:25

之前一直在windows上测试Phonon代码,刚刚回来用linux居然提示我没有Phonon模块

我使用的发行版是自带pyqt4的,但是不带Phonon模块,其实也说的通,Phonon本身也不是Qt的项目,详细请百度  sorry 是谷歌

我用的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的基本使用之道,更深刻的例子在接下来的文章中咱们继续分析


0 0
原创粉丝点击