1

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 秒長い)。

また、クラス外から合計期間の値にアクセスする必要がある場合もあります。これどうやってするの?

前もって感謝します。

4

1 に答える 1

0

pauseplay、およびstopアクションを他の関数と接続できます。

クラスで__init__

self.total_time = 0
self.playing = False
self.play_action = QAction(self.style().standardIcon((QStyle.SP_MediaPlay),"再生",self)
self.play_action.triggered.connect(self.play_triggered_event)

残りのアクションを同様の方法で定義し、それぞれconnecttriggeredフィールドをQAction関数にします

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
于 2012-06-10T18:26:15.693 に答える