pyqt: 使用PyQT制作视频播放器

14人阅读 评论(0) 收藏 举报
分类:

转载自Python应用03 使用PyQT制作视频播放器

import time
import sys

from PyQt4 import QtGui, QtCore
from PyQt4.phonon import Phonon


class PollTimeThread(QtCore.QThread):
    """
    This thread works as a timer.
    """
    update = QtCore.pyqtSignal()

    def __init__(self, parent):
        super(PollTimeThread, self).__init__(parent)

    def run(self):
        while True:
            time.sleep(1)
            if self.isRunning():
                # emit signal
                self.update.emit()
            else:
                return

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        # media
        self.media = Phonon.MediaObject(self)
        self.media.stateChanged.connect(self.handleStateChanged)
        self.video = Phonon.VideoWidget(self)
        self.video.setMinimumSize(200, 200)
        self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self)
        Phonon.createPath(self.media, self.audio)
        Phonon.createPath(self.media, self.video)

        # control button
        self.button = QtGui.QPushButton('选择文件', self)
        self.button.clicked.connect(self.handleButton)

        # for display of time lapse
        self.info = QtGui.QLabel(self)

        # layout
        layout = QtGui.QGridLayout(self)
        layout.addWidget(self.video, 1, 1, 3, 3)
        layout.addWidget(self.info, 4, 1, 1, 3)
        layout.addWidget(self.button, 5, 1, 1, 3)

        # signal-slot, for time lapse
        self.thread = PollTimeThread(self)
        self.thread.update.connect(self.update)

    def update(self):
        # slot
        lapse = self.media.currentTime()/1000.0
        self.info.setText("%4.2f 秒" % lapse)

    def startPlay(self):
        if self.path:
            self.media.setCurrentSource(Phonon.MediaSource(self.path))

            # use a thread as a timer
            self.thread = PollTimeThread(self)
            self.thread.update.connect(self.update)
            self.thread.start()
            self.media.play()

    def handleButton(self):
        if self.media.state() == Phonon.PlayingState:
            self.media.stop()
            self.thread.terminate()
        else:
            self.path = QtGui.QFileDialog.getOpenFileName(self, self.button.text())
            self.startPlay()

    def handleStateChanged(self, newstate, oldstate):
        if newstate == Phonon.PlayingState:
            self.button.setText('停止')
        elif (newstate != Phonon.LoadingState and
              newstate != Phonon.BufferingState):
            self.button.setText('选择文件')
            if newstate == Phonon.ErrorState:
                source = self.media.currentSource().fileName()
                print ('错误:不能播放:', source.toLocal8Bit().data())
                print ('  %s' % self.media.errorString().toLocal8Bit().data())


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('视频播放')
    window = Window()
    window.show()
    sys.exit(app.exec_())

[1] Python应用03 使用PyQT制作视频播放器

查看评论

利用pyside/pyQt实现视频播放器,并利用pyinstaller 打包发布

第一次用pyqt/pyside,遇到了很多问题。所有遇到的问题都是在视频发布这块遇到的,但最终还是成功了,在这里把遇到的问题总结一下。 读取视频中的帧,逐帧显示,显示的格式必须是Qimage,但是用...
  • vola9527
  • vola9527
  • 2014-12-10 17:19:51
  • 3648

pyqt和pyqt实现的音乐播放器

  • 2013年12月17日 21:02
  • 11KB
  • 下载

PyQt Phonon实现音乐播放器

现在网上关于PyQt的文章不多,话说那个官方文档也是烂的一塌糊涂,初次使用Phonon模块遇到很多疑问, 国外网站相关的资料多些,看到一些好的例子记录下来,主要是注释了一下,给后来者一些提示。 #...
  • jieCooner
  • jieCooner
  • 2014-12-18 20:27:06
  • 2795

Qt调用mplayer做一个小小的视频播放器

周末有空,看看电影,听听音乐,想必是很爽的!对于入行不久的新手程序员们,有没有试着编写一个自己的媒体播放器呢???想必定是极好的!有人说,播放音频、视频涉及到不同格式媒体文件的编解码问题,不是那么容易...
  • u013000434
  • u013000434
  • 2013-12-03 00:09:36
  • 6826

PyQt+OpenCV 录制保存、播放视频

 准备这一两个月看看以前的书,另外学习下视频方面的东西(CV方面)。 之前学过几天QT/PyQt,于是用PyQt结合OpenCV,做了一个小程序。具有播放并保存摄像头捕获组成的视频,以及播放本...
  • tastelife
  • tastelife
  • 2014-02-10 11:20:59
  • 3632

phonon 视频 播放器

#include #include #include #include #include #include #include #include #include #include #include #...
  • neu_sunlei
  • neu_sunlei
  • 2009-12-28 12:59:00
  • 1497

使用PyQt4制作一个音乐播放器(1)

本文简要介绍了一下python下可选用的gui库及pyqt+pycharm编程环境的搭建。然后介绍了如何利用qt designer简化界面的设计流程。...
  • telasi
  • telasi
  • 2016-02-02 16:34:19
  • 1971

pyqt实现虚拟小键盘

  • 2016年08月01日 10:10
  • 22KB
  • 下载

[PyQt] PyQt4写的音乐播放器

实现了: 播放歌曲;上/下一首;随机、循环、单曲循环;批量添加、删除歌曲;打开、存储播放列表(M3U格式);添加到收藏;单行/多行歌词桌面展示,有渐变填充效果;歌曲搜索;播放网络歌曲;自动保存配置;...
  • wn0112
  • wn0112
  • 2015-08-18 16:49:00
  • 3990

使用Eric4+PyQt4制作一个简单的文本编辑器

1. 新建工程。打开Eric4,选择菜单Project->New新建一个叫做PyNotePad的工程,选择好工程所保存的路径后,点OK,就可以了。注:点了OK后还会弹出版本控制器的选择对话框,安装个人...
  • kilvdn
  • kilvdn
  • 2009-04-15 21:38:00
  • 9110
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 26万+
    积分: 8286
    排名: 3102
    About
    博客专栏