我正在尝试用 PyQt4 编写一个小型音频播放器。这是我编写的代码的一部分:
class Player(QMainWindow):
def __init__(self, fileLoc, parent = None):
super(QMainWindow, self).__init__()
self.totTime = 0
self.audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self)
self.mediaObject = Phonon.MediaObject(self)
self.mediaObject.setTickInterval(1000)
self.mediaObject.tick.connect(self.tick)
self.mediaObject.stateChanged.connect(self.stateChanged)
Phonon.createPath(self.mediaObject, self.audioOutput)
#Define Play, Pause and Stop actions
self.playAction = QAction(self.style().standardIcon(QStyle.SP_MediaPlay),
"Play", self, enabled = False, triggered = self.mediaObject.play)
self.pauseAction = QAction(self.style().standardIcon(QStyle.SP_MediaPause),
"Pause", self, enabled = False, triggered = self.mediaObject.pause)
self.stopAction = QAction(self.style().standardIcon(QStyle.SP_MediaStop),
"Stop", self, enabled = False, triggered = self.mediaObject.stop)
#Initiate User Interface
self.userInterface()
self.timeDisp.display('00:00')
self.mediaObject.setCurrentSource(Phonon.MediaSource(fileLoc))
self.mediaObject.play()
def tick(self, time):
self.displayTime = QTime(0, (time / 60000) % 60, (time / 1000) % 60)
self.timeDisp.display(self.displayTime.toString('mm:ss'))
我的问题是,我无法弄清楚如何获取当前正在播放的文件的总持续时间。我尝试在 init() 末尾打印 mediObject.totalTime() 的输出。但它为所有视频返回 -1。 tick() 中的 mediObject.totalTime() 返回不正确的持续时间(比实际持续时间长 10 - 15 秒)。
此外,我可能必须从类外部访问总持续时间的值。我该怎么做?
提前谢谢。
您可以将pause
、play
和stop
操作与其他函数连接起来:
在类__init__
:
self.total_time = 0自我播放 = 假self.play_action = QAction(self.style().standardIcon((QStyle.SP_MediaPlay),"play",self)self.play_action.triggered.connect(self.play_triggered_event)
并以类似的方式定义其余操作,将每个QAction
的triggered
字段connect
到一个函数
def play_triggered_event(self):
if not self.playing:
self.mediaObject.play
self.playing = True
self.start_time = time.clock()
def pause_triggered_event(self):
if self.playing:
self.mediaObject.pause
self.playing = False
self.total_time += (time.clock() - self.start_time)
def stop_triggered_event(self):
if self.playing:
self.mediaObject.stop
self.playing = False
print "Total time elapsed: " + str(self.total_time)
基本上,它是关于在触发影响经过时间的操作时保存一些程序状态。
若要获取类外的总时间,请为类编写一个访问器:
def get_total_time(self):
return self.total_time