最近研究了Python的两个GUI包,Tkinter和PyQT。这两个GUI包的底层分别是Tcl/Tk和QT。相比之下,我觉得PyQT使用起来更加方便,功能也相对丰富。这一篇用PyQT实现一个视频播放器,并借此来说明PyQT的基本用法。

视频播放器

先把已经完成的代码放出来。代码基于Python 3.5:

代码实现了一个有GUI窗口的应用,用来播放视频文件。视频播放利用了PyQT中的Phonon模块。此外,还有一个进程每隔一秒发出一个信号。窗口在接收到信号后,更新视频播放的时间。这个应用的效果如下:

测试运行环境为Mac OSX El Capitan。

视图部分

写完这个代码之后,我发现这个代码虽然简单,但涉及了几个重要机制,可以用PyQT的练习题。下面对代码进行一些简要的说明,首先是主程序部分:

在PyQT程序中,QApplication是最上层的对象,指代整个GUI应用。我们在程序的一开始创建了一个应用对象,在程序最后调用exec_()来运行这个应用。sys.exit()用来要求应用的主循环结束后干净地退出程序。PyQT程序的开始和结尾都是类似的固定套路。关键就在于其间定义的QWidget对象。

我们自定义的Window类继承自QWidget。其实QWidget是所有用户界面对象的基类,并不单单指代一个窗口。表格、输入框、按钮都继承自QWidget。在一个Window对象中,我们还组合有QPushButton和QLabel这样的对象,分别代表一个按钮和一个文本框。它们通过QGridLayout的方式,布局在Window的界面上,即下面一部分代码:

QGridLayout把界面分成网格,并把某个视图对象附着在特定的网格位置。比如说,addWidget()(self.info, 4, 1, 1, 3)表示把一个文本框对象放在第4排、第1列的位置。该文本框纵向将占据1排,横向占据3列。这样,上下层视图的位置关系就通过布局确定了下来。除了网格式的布局,PyQT还支持其他形式的布局,如横向堆砌、纵向堆砌等等,可以进一步了解。

除了QWidget,PyQT还提供了常用的对话框,如:

这里的QFileDialog对话框用于选择文件。对话框将访问所选文件的路径。除了文件选择,对话框还有确认对话框、文件输入对话框、色彩对话框。这些对话框实现了不少常用的GUI输入功能。通过利用这些对话框,可以减少程序员从头开发的工作量。

多线程

GUI界面的主线程通常留给应用做主循环。其他的很多工作要通过其他的线程来完成。PyQT多线程编程很简单,只需要重写QThread的run()方法就可以了:

创建线程后,只需要调用start()方法,就可以运行:

信号与槽

GUI经常要用到异步处理。比如说点击某个按钮,然后调用相应的回调函数。QT的“信号与槽”(signal-slot)机制就是为了解决异步处理问题。我们在线程中创建了信号,并通过emit()方法来发出信号:

有了信号,我们就可以给该信号连接到一个“槽”,其实就是对应于该信号的回调函数:

每当信号被发出时,“槽”就会被调用。在这个例子中,就是更新视频播放时间。QT中的“信号与槽”是普遍存在的机制。一些组建如按键,预设了“点击”这样的信号,可以直接对应到“槽”。如代码中的:

此外,Phonon是一个很好用的多媒体模块,使用方法也很简单,可以参考代码本身,这里不再赘述。

作者:Vamei

源自:

http://www.cnblogs.com/vamei/p/6139513.html

python开发视频播放器_Python使用PyQT制作视频播放器相关推荐

  1. python制作视频播放器_Python使用PyQT制作视频播放器!专属播放器~

    原标题:Python使用PyQT制作视频播放器!专属播放器~ 最近研究了Python的两个GUI包,Tkinter和PyQT.这两个GUI包的底层分别是Tcl/Tk和QT.相比之下,我觉得PyQT使用 ...

  2. python开发的前景_python开发前景怎么样

    随着近几年Python的飞速发展,应用范围逐步趋于广泛,后端开发.前端开发.爬虫.金融量化分析.人工智能.自动化运维.自动化运维.大数据,Python都有涉及.Python相对其他编程语言来讲,语法较 ...

  3. python开发桌面时钟_python基于Kivy写一个图形桌面时钟程序

    Kivy 是一个开源的 Python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 Kivy 编写的程序可在 Linux,Windows,OS X,Android,iOS 和 Ra ...

  4. 能够支持python开发的环境_python集成开发环境哪个好?老男孩Python

    python是非常热门的编程语言,当我们通过python进行编程的时候,需要借助一些工具来完成,接下来老男孩教育为大家介绍五款python集成开发环境,你更喜欢哪一款呢? 1. PyCharm PyC ...

  5. python开发游戏流程_python开发游戏的前期准备

    python开发游戏的前期准备 本文章面向有一定基础的python学习者,使用Pygame包开发一款简单的游戏 首先打开命令行,使用PyPI下载Pygame包(输入命令pip install pyga ...

  6. python开发工具管理系统_Python开发桌面软件文档及网址管理工具,强迫症的福音...

    原标题:Python开发桌面软件文档及网址管理工具,强迫症的福音 写在前面 这两天用python鼓捣开发了一个软件,分享给同事,觉得很实用,可以大大提高工作效率,想通过平台分享出来给大家 希望给爱好p ...

  7. python开发效率怎样_Python 的开发效率真的比 Java高吗?

    真的比Java高很高. 几个例子. 爬虫领域,几年前就用Scrapy抓百度,新浪,股吧等各种东西. 五分钟写好一个小爬虫,爽到暴有没有?当年我就是靠教人写爬虫...才骗到小妹妹跟我约会的. 文本处理, ...

  8. python开发webservice服务_Python开发WebService系列教程之REST,web.py,eurasia,Djan

    在Bioinformatics(生物信息学)领域,WebService是很重要的一种数据交换技术,未来必将更加重要.目前EBI所提供的WebService就分别有SOAP和REST两种方式的服务,不管 ...

  9. python开发工程师工资_Python开发工程师工资一般多少钱

    Python工程师工资多少钱,相信每一个想要踏入Python开发行业的人都想知道这样一个问题,一个行业的薪资标准代表了它繁荣与否也代表了自己职业的未来的发展.下面就让我们来看一下一般Python开发工 ...

最新文章

  1. 前嗅ForeSpider中数据采集界面介绍
  2. VTK:几何对象之OpenVRCylinder
  3. 【WS-Federation】到底有多少公司在用WS-Federation
  4. Qt工作笔记-使用QFileSystemWatcher监控文件是否改变
  5. 云栖社区,诚邀技术同仁一同入驻
  6. Android应用开发(15)---字符串资源
  7. opencv给视频打马赛克
  8. Mysql Federated For Windows
  9. 通过实现IHttpModule初始化Nhibernate的Session
  10. 条形码扫描模块的作用是什么?有什么应用意义?
  11. ac68无线网卡 linux驱动下载,华硕USB-AC68驱动|华硕USB-AC68无线网卡驱动下载 v2.1.2.1官方版 - 121下载站...
  12. turtle画奥运五环图
  13. 汉字简体繁体转换----Javascript
  14. popupwindow 不抢夺焦点_不知道家里颜色怎么配?一起去翻画册吧!
  15. 傅里叶变换以及离散傅里叶变换
  16. 10 个最好的免费开源网店系统
  17. 平板电脑可以用手写的计算机软件,平板电脑可以当手写板用吗
  18. SHADOWS_SHADOWMASK与LIGHTMAP_SHADOW_MIXING
  19. 平台 恒鑫 机器人_电机转子组装机器人系统-恒鑫智能
  20. msql 5.5 5.6 5.7 8.0 区别

热门文章

  1. cpython pypy_PyPy4.0比Cpython更快的Python编译器
  2. SQL脚本创建级联_【新年跳槽必备】2020最新(EF/Sql专题)面试题 速领!
  3. 驾驶证计算机管理系统,驾驶证信息系统
  4. 关于FPGA的学习顺序
  5. 智慧综合交通运行监测平台
  6. 锋云数据服务器管理文件说明书,云端数据库使用说明
  7. 教育的未来,会是什么样子?
  8. Django教程(安装PythonPycharmDjango)
  9. 按文件夹内的文件编号排序依次读取文件 python
  10. strong 标签和em标签