Function:音乐播放器Author琴棋书画importosimportsysimporttimeimportrandomimportconfigparserfromPyQt5。QtGuiimportfromPyQt5。QtCoreimportfromPyQt5。QtWidgetsimportfromPyQt5。QtMultimediaimport音乐播放器classmusicPlayer(QWidget):definit(self):super()。init()self。initialize()初始化definitialize(self):self。setWindowTitle(音乐播放器v1。0琴棋书画)self。setWindowIcon(QIcon(icon。ico))self。songslist〔〕self。songformats〔mp3,m4a,flac,wav,ogg〕self。settingfilenamesetting。iniself。playerQMediaPlayer()self。curpathos。path。abspath(os。path。dirname(file))self。curplayingsongself。isswitchingFalseself。ispauseTrue界面元素播放时间self。label1QLabel(00:00)self。label1。setStyle(QStyleFactory。create(Fusion))self。label2QLabel(00:00)self。label2。setStyle(QStyleFactory。create(Fusion))滑动条self。sliderQSlider(Qt。Horizontal,self)self。slider。sliderMoved〔int〕。connect(lambda:self。player。setPosition(self。slider。value()))self。slider。setStyle(QStyleFactory。create(Fusion))播放按钮self。playbuttonQPushButton(播放,self)self。playbutton。clicked。connect(self。playMusic)self。playbutton。setStyle(QStyleFactory。create(Fusion))上一首按钮self。previewbuttonQPushButton(上一首,self)self。previewbutton。clicked。connect(self。previewMusic)self。previewbutton。setStyle(QStyleFactory。create(Fusion))下一首按钮self。nextbuttonQPushButton(下一首,self)self。nextbutton。clicked。connect(self。nextMusic)self。nextbutton。setStyle(QStyleFactory。create(Fusion))打开文件夹按钮self。openbuttonQPushButton(打开文件夹,self)self。openbutton。setStyle(QStyleFactory。create(Fusion))self。openbutton。clicked。connect(self。openDir)显示音乐列表self。qlistQListWidget()self。qlist。itemDoubleClicked。connect(self。doubleClicked)self。qlist。setStyle(QStyleFactory。create(windows))如果有初始化setting,导入settingself。loadSetting()播放模式self。cmbQComboBox()self。cmb。setStyle(QStyleFactory。create(Fusion))self。cmb。addItem(顺序播放)self。cmb。addItem(单曲循环)self。cmb。addItem(随机播放)计时器self。timerQTimer(self)self。timer。start(1000)self。timer。timeout。connect(self。playByMode)界面布局self。gridQGridLayout()self。setLayout(self。grid)self。grid。addWidget(self。qlist,0,0,5,10)self。grid。addWidget(self。label1,0,11,1,1)self。grid。addWidget(self。slider,0,12,1,1)self。grid。addWidget(self。label2,0,13,1,1)self。grid。addWidget(self。playbutton,0,14,1,1)self。grid。addWidget(self。nextbutton,1,11,1,2)self。grid。addWidget(self。previewbutton,2,11,1,2)self。grid。addWidget(self。cmb,3,11,1,2)self。grid。addWidget(self。openbutton,4,11,1,2)根据播放模式播放音乐defplayByMode(self):if(notself。ispause)and(notself。isswitching):self。slider。setMinimum(0)self。slider。setMaximum(self。player。duration())self。slider。setValue(self。slider。value()1000)self。label1。setText(time。strftime(M:S,time。localtime(self。player。position()1000)))self。label2。setText(time。strftime(M:S,time。localtime(self。player。duration()1000)))顺序播放if(self。cmb。currentIndex()0)and(notself。ispause)and(notself。isswitching):ifself。qlist。count()0:returnifself。player。position()self。player。duration():self。nextMusic()单曲循环elif(self。cmb。currentIndex()1)and(notself。ispause)and(notself。isswitching):ifself。qlist。count()0:returnifself。player。position()self。player。duration():self。isswitchingTrueself。setCurPlaying()self。slider。setValue(0)self。playMusic()self。isswitchingFalse随机播放elif(self。cmb。currentIndex()2)and(notself。ispause)and(notself。isswitching):ifself。qlist。count()0:returnifself。player。position()self。player。duration():self。isswitchingTrueself。qlist。setCurrentRow(random。randint(0,self。qlist。count()1))self。setCurPlaying()self。slider。setValue(0)self。playMusic()self。isswitchingFalse打开文件夹defopenDir(self):self。curpathQFileDialog。getExistingDirectory(self,选取文件夹,self。curpath)ifself。curpath:self。showMusicList()self。curplayingsongself。setCurPlaying()self。label1。setText(00:00)self。label2。setText(00:00)self。slider。setSliderPosition(0)self。ispauseTrueself。playbutton。setText(播放)导入settingdefloadSetting(self):ifos。path。isfile(self。settingfilename):configconfigparser。ConfigParser()config。read(self。settingfilename)self。curpathconfig。get(MusicPlayer,PATH)self。showMusicList()更新settingdefupdateSetting(self):configconfigparser。ConfigParser()config。read(self。settingfilename)ifnotos。path。isfile(self。settingfilename):config。addsection(MusicPlayer)config。set(MusicPlayer,PATH,self。curpath)config。write(open(self。settingfilename,w))显示文件夹中所有音乐defshowMusicList(self):self。qlist。clear()self。updateSetting()forsonginos。listdir(self。curpath):ifsong。split(。)〔1〕inself。songformats:self。songslist。append(〔song,os。path。join(self。curpath,song)。replace(,)〕)self。qlist。addItem(song)self。qlist。setCurrentRow(0)ifself。songslist:self。curplayingsongself。songslist〔self。qlist。currentRow()〕〔1〕双击播放音乐defdoubleClicked(self):self。slider。setValue(0)self。isswitchingTrueself。setCurPlaying()self。playMusic()self。isswitchingFalse设置当前播放的音乐defsetCurPlaying(self):self。curplayingsongself。songslist〔self。qlist。currentRow()〕〔1〕self。player。setMedia(QMediaContent(QUrl(self。curplayingsong)))提示defTips(self,message):QMessageBox。about(self,提示,message)播放音乐defplayMusic(self):ifself。qlist。count()0:self。Tips(当前路径内无可播放的音乐文件)returnifnotself。player。isAudioAvailable():self。setCurPlaying()ifself。ispauseorself。isswitching:self。player。play()self。ispauseFalseself。playbutton。setText(暂停)elif(notself。ispause)and(notself。isswitching):self。player。pause()self。ispauseTrueself。playbutton。setText(播放)上一首defpreviewMusic(self):self。slider。setValue(0)ifself。qlist。count()0:self。Tips(当前路径内无可播放的音乐文件)returnprerowself。qlist。currentRow()1ifself。qlist。currentRow()!0elseself。qlist。count()1self。qlist。setCurrentRow(prerow)self。isswitchingTrueself。setCurPlaying()self。playMusic()self。isswitchingFalse下一首defnextMusic(self):self。slider。setValue(0)ifself。qlist。count()0:self。Tips(当前路径内无可播放的音乐文件)returnnextrowself。qlist。currentRow()1ifself。qlist。currentRow()!self。qlist。count()1else0self。qlist。setCurrentRow(nextrow)self。isswitchingTrueself。setCurPlaying()self。playMusic()self。isswitchingFalserunifnamemain:appQApplication(sys。argv)guimusicPlayer()gui。show()sys。exit(app。exec())