Por esto es que Qt y PyQt valen la pena
¿Por qué están buenos Qt y PyQt?
Widget reproductor de audio:
# -*- coding: utf-8 -*- import sys, os from PyQt4 import QtCore, QtGui, uic from PyQt4.phonon import Phonon import icons_rc class AudioPlayer(QtGui.QWidget): def __init__(self, url, parent = None): self.url = url QtGui.QWidget.__init__(self, parent) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.player = Phonon.createPlayer(Phonon.MusicCategory, Phonon.MediaSource(url)) self.player.setTickInterval(100) self.player.tick.connect(self.tock) self.play_pause = QtGui.QPushButton(self) self.play_pause.setIcon(QtGui.QIcon(':/icons/player_play.svg')) self.play_pause.clicked.connect(self.playClicked) self.player.stateChanged.connect(self.stateChanged) self.slider = Phonon.SeekSlider(self.player , self) self.status = QtGui.QLabel(self) self.status.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.download = QtGui.QPushButton("Download", self) self.download.clicked.connect(self.fetch) layout = QtGui.QHBoxLayout(self) layout.addWidget(self.play_pause) layout.addWidget(self.slider) layout.addWidget(self.status) layout.addWidget(self.download) def playClicked(self): if self.player.state() == Phonon.PlayingState: self.player.pause() else: self.player.play() def stateChanged(self, new, old): if new == Phonon.PlayingState: self.play_pause.setIcon(QtGui.QIcon(':/icons/player_pause.svg')) else: self.play_pause.setIcon(QtGui.QIcon(':/icons/player_play.svg')) def tock(self, time): time = time/1000 h = time/3600 m = (time-3600*h) / 60 s = (time-3600*h-m*60) self.status.setText('%02d:%02d:%02d'%(h,m,s)) def fetch(self): print 'Should download %s'%self.url def main(): app = QtGui.QApplication(sys.argv) window=AudioPlayer(sys.argv[1]) window.show() # It's exec_ because exec is a reserved word in Python sys.exit(app.exec_()) if __name__ == "__main__": main()
Widget reproductor de video:
import sys, os from PyQt4 import QtCore, QtGui, uic from PyQt4.phonon import Phonon import icons_rc class VideoPlayer(QtGui.QWidget): def __init__(self, url, parent = None): self.url = url QtGui.QWidget.__init__(self, parent) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) self.player = Phonon.VideoPlayer(Phonon.VideoCategory,self) self.player.load(Phonon.MediaSource(self.url)) self.player.mediaObject().setTickInterval(100) self.player.mediaObject().tick.connect(self.tock) self.play_pause = QtGui.QPushButton(self) self.play_pause.setIcon(QtGui.QIcon(':/icons/player_play.svg')) self.play_pause.clicked.connect(self.playClicked) self.player.mediaObject().stateChanged.connect(self.stateChanged) self.slider = Phonon.SeekSlider(self.player.mediaObject() , self) self.status = QtGui.QLabel(self) self.status.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.download = QtGui.QPushButton("Download", self) self.download.clicked.connect(self.fetch) topLayout = QtGui.QVBoxLayout(self) topLayout.addWidget(self.player) layout = QtGui.QHBoxLayout(self) layout.addWidget(self.play_pause) layout.addWidget(self.slider) layout.addWidget(self.status) layout.addWidget(self.download) topLayout.addLayout(layout) self.setLayout(topLayout) def playClicked(self): if self.player.mediaObject().state() == Phonon.PlayingState: self.player.pause() else: self.player.play() def stateChanged(self, new, old): if new == Phonon.PlayingState: self.play_pause.setIcon(QtGui.QIcon(':/icons/player_pause.svg')) else: self.play_pause.setIcon(QtGui.QIcon(':/icons/player_play.svg')) def tock(self, time): time = time/1000 h = time/3600 m = (time-3600*h) / 60 s = (time-3600*h-m*60) self.status.setText('%02d:%02d:%02d'%(h,m,s)) def fetch(self): print 'Should download %s'%self.url def main(): app = QtGui.QApplication(sys.argv) window=VideoPlayer(sys.argv[1]) window.show() # It's exec_ because exec is a reserved word in Python sys.exit(app.exec_()) if __name__ == "__main__": main()
...
You've got an unused icons_rc import in your scripts, FWIW.
That provides the icons I use as ':/icons/whatever.svg' , it's a resource file compiled using pyrcc4.
The uic import is useless, though.