制作这个播放器的目的是随机或顺序播放下载的mp3文件。选择要播放的音乐路径,选择播放方式,经测试,可以完美播放本地音乐。[阅读全文]在开始之前,我们先介绍一个免费下载mp3音乐的网站。如果需要,您可以下载自己喜欢的音乐。当然,不需要有各大音乐平台会员的大老板。http://music.y444.cn/#/如果您缺少音乐素材,可以免费下载。准备好音乐资料后,将它们放在一个文件夹中。在应用程序的实现过程中,总共使用了以下库。需要注意的是这个库playsound使用的版本是1.3.0。听说其他版本播放音乐可能有问题。也可以将播放音乐的部分换成其他实现方式。fromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*fromPyQt5.QtGuiimport*importsysfromQCandyUiimportCandyWindowimportrandom,osfromplaysoundimportplaysound首先要实现的是播放音乐的业务逻辑。这里是pyqt5自带的QThread线程。实现的目的是将播放音乐的部分作为子线程运行,防止与UI界面的主线程阻塞。实现子线程的部分是同一个范式。一般都是按照这个范式来实现的,而且是经过反复试验的。以前的UI桌面应用几乎都是采用这种方式来实现多线程的。类PlayThread(QThread):完成=pyqtSignal(bool)def__init__(self,parent=None):super(PlayThread,self).__init__(parent)self.parent=parentself.working=Truedef__del__(self):self.working=Falseself.wait()defrun(self):music_files=os.listdir(self.parent.music_file_path.text())print(music_files)forindexinrange(0,len(music_files)-1):如果self.parent.play_type_selected.currentText()=='randomplay':index=random.randint(0,len(music_files)-1)print(index)playsound(os.path.join(self.parent.music_file_path.text(),music_files[index]))self.finished.emit(True)音乐播放的业务逻辑完成,接下来实现UI界面。该应用程序设计简单,不是很复杂。pyqt5的UI界面的实现主要是组件的布局和槽函数的引用。下面是UI界面的布局以及各个槽函数的初始化和引用。以及如何在界面的主线程中使用子线程。classMusicUI(QWidget):def__init__(self):super(MusicUI,self).__init__()self.init_ui()definit_ui(self):self.setWindowTitle('本地音乐播放器公众号:【Python集中营】')self.setWindowIcon(QIcon('music.ico'))self.setFixedWidth(500)self.setFixedHeight(100)hbox1=QHBoxLayout()self.music_file_path=QLineEdit()self.music_file_path.setReadOnly(True)self.music_file_btn=QPushButton()self.music_file_btn.setText('path')self.music_file_btn.clicked.connect(self.music_file_btn_click)hbox1.addWidget(self.music_file_path)hbox1.addWidget(self.music_file_btn)hbox2=QHBoxLayout_plays.self=QComboBox()self.play_type_selected.addItem('随机播放')self.play_type_selected.addItem('有序播放')self.start_btn=QPushButton()self.start_btn.setText('开始播放')self.start_btn.clicked.连接(self.start_btn_click)hbox2.addWidget(self.play_type_selected)hbox2.addWidget(self.start_btn)vbox=QVBoxLayout()vbox.addLayout(hbox1)vbox.addLayout(hbox2)self.thread_=PlayThread(self)self.thread_.finished.connect(self.finished)self.setLayout(vbox)defmusic_file_btn_click(self):dir=QFileDialog.getExistingDirectory(self,"SelectFolder",os.getcwd())self.music_file_path.setText(dir)defstart_btn_click(self):self。start_btn.setEnabled(False)self.thread_.start()deffinished(self,finished):iffinishedisTrue:self.start_btn.setEnabled(True)#最后使用main函数将界面布局的全过程添加到循环中的主体,你就完成了if__name__=='__main__':app=QApplication(sys.argv)w=CandyWindow.createWindow(MusicUI(),theme='blue',title='本地音乐播放器公众号:[Python集中营]',ico_path='Music.ico')w.show()sys.exit(app.exec_())完整源码已保存在百度网盘,将以上所有代码块复制到开发中运行,或者在公众号回复‘1002’获取下载链接,直接下载.py文件到开发工具即可运行。创作不易,欢迎大家积极提问,有python相关问题欢迎留言,看到第一时间回复,感谢大家一直以来的支持!【往期亮点】自动化工具:PyAutoGUI的键鼠控制,解放双手的利器!你见过程序员送的生日蛋糕吗?懒python操作,代码里永远只需要导入一个库...自动化办公:手机号码提取器,使用正则表达式轻松提取文本文件中的手机号码...我刚刚发现的可视化动态库ipyvizzu是如此美丽!
