凌的博客

您现在的位置是: 首页 > 学无止境 > python > 

python

PyQt5 简单Mp3播放器--QMediaPlayer

2019-08-25 python 3198

1.png

import sys

from PyQt5.QtWidgets import QWidget,QApplication,QPushButton,QSlider,QLabel
from PyQt5.QtMultimedia import QMediaPlayer,QMediaContent
from PyQt5.QtCore import QUrl,Qt
import os
class Mp3(QWidget):


    def __init__(self):
        super().__init__()
        self.initUI()

        self.control_flag = 0

    def formatTime(self,num):
        num = int(num)

        if num>0:
            min = str(int(num/60+100))[1:3]
            sec = str(int(num%60+100))[1:3]
            return "%s:%s" % (str(min),str(sec))

        return "00:00"

    def initUI(self):

        mp3file = "yhbk.mp3"
        self.player = QMediaPlayer()
        self.player.setMedia(QMediaContent(QUrl.fromLocalFile(mp3file)))
        self.player.play()

        mp3_lbl = QLabel(os.path.basename(mp3file),self)
        mp3_lbl.move(100, 30)

        #mp3 时长
        self.time_lbl = QLabel(self)
        self.time_lbl.move(130, 60)

        self.volume_slider = QSlider(self)
        self.volume_slider.resize(10,50)
        self.volume_slider.move(240,80)
        self.volume_slider.valueChanged[int].connect(self.volume)

        self.player.setVolume(25)
        self.volume_lbl = QLabel("25",self)
        self.volume_lbl.move(240, 130)


        self.play_slider = QSlider(Qt.Horizontal,self)
        self.play_slider.resize(200,20)
        self.play_slider.move(30,80)

        self.play_slider.sliderPressed.connect(self.setControlIn)
        self.play_slider.sliderReleased.connect(self.setControlOut)
        self.play_slider.sliderMoved.connect(self.setControlIn)

        self.player.pause()
        self.actionbtn = QPushButton("暂停",self)
        self.actionbtn.move(100, 130)
        self.actionbtn.clicked.connect(self.action)

        # 信号、槽
        self.player.positionChanged.connect(self.playState)
        self.player.durationChanged.connect(self.playTime)


        self.setGeometry(300,300,300,200)
        self.setWindowTitle("Mp3")

    # 按下
    def setControlIn(self):
        self.control_flag = 1

    #离开
    def setControlOut(self):
        self.control_flag = 0
        time = int(self.player.duration() / 1000)
        pos = int(self.play_slider.value()/100*time*1000)
        self.player.setPosition(pos)


    #播放位置
    def playState(self):
        dur = int(self.player.position()/1000)
        time =  int(self.player.duration()/1000)

        self.time_lbl.setText("%s/%s" % (self.formatTime(dur), self.formatTime(time)))
        self.time_lbl.adjustSize()

        #控制进度
        if self.control_flag == 0:
            self.play_slider.setValue(int(dur/time*100))


    def playTime(self):
        time =  int(self.player.duration()/1000)
        self.time_lbl.setText("%s/%s" %(self.formatTime(0),self.formatTime(time)))
        self.time_lbl.adjustSize()


    def volume(self,num):
        self.player.setVolume(num)
        self.volume_lbl.setText(str(num))
        self.volume_lbl.adjustSize()

    def action(self):

        if self.actionbtn.text() == "播放":
            self.actionbtn.setText("暂停")
            self.player.pause()
        else:
            self.actionbtn.setText("播放")
            self.player.play()


if __name__ =="__main__":

    app = QApplication(sys.argv)
    ex = Mp3()
    ex.show()
    sys.exit(app.exec_())


文章评论

0条评论