当前位置: 首页 > news >正文

江苏网站建设多少钱做外贸哪些国外网站可以推广

江苏网站建设多少钱,做外贸哪些国外网站可以推广,办公风云ppt模板网,wordpress静态化设置最近研究了Python的两个GUI包#xff0c;Tkinter和PyQT。这两个GUI包的底层分别是Tcl/Tk和QT。相比之下#xff0c;我觉得PyQT使用起来更加方便#xff0c;功能也相对丰富。这一篇用PyQT实现一个视频播放器#xff0c;并借此来说明PyQT的基本用法。 视频播放器 先把已经完成…最近研究了Python的两个GUI包Tkinter和PyQT。这两个GUI包的底层分别是Tcl/Tk和QT。相比之下我觉得PyQT使用起来更加方便功能也相对丰富。这一篇用PyQT实现一个视频播放器并借此来说明PyQT的基本用法。 视频播放器 先把已经完成的代码放出来。代码基于Python 3.5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 import time import sys from PyQt4import QtGui, QtCore from PyQt4.phononimport 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.LoadingStateand 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_()) 代码实现了一个有GUI窗口的应用用来播放视频文件。视频播放利用了PyQT中的Phonon模块。此外还有一个进程每隔一秒发出一个信号。窗口在接收到信号后更新视频播放的时间。这个应用的效果如下 测试运行环境为Mac OSX El Capitan。视图部分 写完这个代码之后我发现这个代码虽然简单但涉及了几个重要机制可以用PyQT的练习题。下面对代码进行一些简要的说明首先是主程序部分 1 2 3 4 5 app QtGui.QApplication(sys.argv) ... window Window() window.show() sys.exit(app.exec_()) 在PyQT程序中QApplication是最上层的对象指代整个GUI应用。我们在程序的一开始创建了一个应用对象在程序最后调用exec_()来运行这个应用。sys.exit()用来要求应用的主循环结束后干净地退出程序。PyQT程序的开始和结尾都是类似的固定套路。关键就在于其间定义的QWidget对象。 我们自定义的Window类继承自QWidget。其实QWidget是所有用户界面对象的基类并不单单指代一个窗口。表格、输入框、按钮都继承自QWidget。在一个Window对象中我们还组合有QPushButton和QLabel这样的对象分别代表一个按钮和一个文本框。它们通过QGridLayout的方式布局在Window的界面上即下面一部分代码 1 2 3 4 5 # layout layout QtGui.QGridLayout(self) ... layout.addWidget(self.info,4,1,1,3) layout.addWidget(self.button,5,1,1,3) QGridLayout把界面分成网格并把某个视图对象附着在特定的网格位置。比如说addWidget()(self.info, 4, 1, 1, 3)表示把一个文本框对象放在第4排、第1列的位置。该文本框纵向将占据1排横向占据3列。这样上下层视图的位置关系就通过布局确定了下来。除了网格式的布局PyQT还支持其他形式的布局如横向堆砌、纵向堆砌等等可以进一步了解。 除了QWidgetPyQT还提供了常用的对话框如 self.path QtGui.QFileDialog.getOpenFileName(self, self.button.text()) 这里的QFileDialog对话框用于选择文件。对话框将访问所选文件的路径。除了文件选择对话框还有确认对话框、文件输入对话框、色彩对话框。这些对话框实现了不少常用的GUI输入功能。通过利用这些对话框可以减少程序员从头开发的工作量。 多线程 GUI界面的主线程通常留给应用做主循环。其他的很多工作要通过其他的线程来完成。PyQT多线程编程很简单只需要重写QThread的run()方法就可以了 1 2 3 4 5 6 class PollTimeThread(QtCore.QThread): def __init__(self, parent): super(PollTimeThread,self).__init__(parent) def run(self): ... 创建线程后只需要调用start()方法就可以运行 1 2 3 4 5 self.thread PollTimeThread() ... self.thread.start()# 启动线程 ... self.thread.terminate()# 终止线程 信号与槽 GUI经常要用到异步处理。比如说点击某个按钮然后调用相应的回调函数。QT的“信号与槽”(signal-slot)机制就是为了解决异步处理问题。我们在线程中创建了信号并通过emit()方法来发出信号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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 有了信号我们就可以给该信号连接到一个“槽”其实就是对应于该信号的回调函数 1 self.thread.update.connect(self.update) 每当信号被发出时“槽”就会被调用。在这个例子中就是更新视频播放时间。QT中的“信号与槽”是普遍存在的机制。一些组建如按键预设了“点击”这样的信号可以直接对应到“槽”。如代码中的 1 self.button.clicked.connect(self.handleButton) 此外Phonon是一个很好用的多媒体模块使用方法也很简单可以参考代码本身这里不再赘述。 以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持服务器之家。 原文链接http://www.cnblogs.com/vamei/p/6139513.html
http://wiki.neutronadmin.com/news/294536/

相关文章:

  • 怎么修改网站主页建网站的详细技术
  • 施工建设集团网站企业管理咨询包括哪些
  • 招聘网站建设工作汇报网站如何接广告
  • 保险网站建设方案龙岗区网站建设
  • 汕头网站快速排名怎么在亚马逊做跨境电商
  • 如何用vc做网站电商设计师招聘
  • 云南微网站制作哪家好广州网站车管所
  • 如何申请深圳设计公司网站产品摄影网站
  • jsp网站开发小程序开发电商网站多少钱
  • 响应式网站管理自建论坛要多少钱
  • flash相册网站源码百度 竞价排名
  • 51做网站建设企业官网关于怎么做网站
  • 如何查看网站的访问量电子商务网站建设与管理答案
  • 建设银行官网站预约邯山网站制作
  • 学习网页设计与制作的网站建设网站技术标准
  • 织梦上网站次导航怎么做会展展厅设计
  • php网站留言板模板新闻列表做的最好的网站
  • 医院网站加快建设苏州搜索引擎优化
  • 大连网络建站模板广州自助网站推广建站
  • 新公司建网站如何去门户网站做推广呢
  • 网站正在建设中手机版简单的模板网站
  • 网站做系统叫什么鄂州seo厂家
  • 网站数据库地址是什么在线logo
  • 网站宣传内容百度指数如何分析
  • 网站建设效果有客优秀网站建设效果杭州网络推广公司那家好
  • 网站源码本地演示有做销售产品的网站有哪些
  • 网站权重最高网页平面设计培训
  • 推荐黄石网站建设wordpress安装提示数据库空
  • wordpress 阿里云主机北京首页关键词优化
  • 网站在互联网营销中的作用广州网站建设哪好