<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
製作這個播放器的目的是為了將下載下來的mp3檔案進行隨機或是順序的播放。選擇需要播放的音樂的路徑,選擇播放方式,經過測試可以完美的播放本地音樂。
在開始之前介紹一個免費下載mp3音樂的網站,有需要的可以下載自己喜歡的音樂。當然有各大音樂平臺會員的大佬就不需要了。
缺少音樂素材的可以去免費下載即可,準備好音樂素材後將其放到一個資料夾下面即可。
在應用實現過程中,總共使用了下面這些庫,特別需要注意的是這個庫playsound使用的版本是1.3.0,聽說其他版本在播放音樂時可能存在問題。也可以將播放音樂的部分換成其他的實現方式。
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys from QCandyUi import CandyWindow import random, os from playsound import playsound
最先實現的是播放音樂的業務邏輯,這裡是採用pyqt5自帶的QThread執行緒來實現的,目的是將播放音樂的部分作為一個子執行緒來執行,防止與UI介面的主執行緒產生阻塞。
實現子執行緒的部分是一樣的正規化,一般情況下按照這種正規化實現,屢試不爽。在前面的UI桌面應用中幾乎都是使用這種方式來實現多執行緒的。
class PlayThread(QThread): finished = pyqtSignal(bool) def __init__(self, parent=None): super(PlayThread, self).__init__(parent) self.parent = parent self.working = True def __del__(self): self.working = False self.wait() def run(self): music_files = os.listdir(self.parent.music_file_path.text()) print(music_files) for index in range(0, len(music_files) - 1): if self.parent.play_type_selected.currentText() == '隨機播放': 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介面佈局及各個槽函數的初始化及參照。以及如何介面的主執行緒中呼叫子執行緒的使用。
class MusicUI(QWidget): def __init__(self): super(MusicUI, self).__init__() self.init_ui() def init_ui(self): self.setWindowTitle('本地音樂播放器 公眾號:[Python 集中營]') self.setWindowIcon(QIcon('音樂.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('路徑') 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() self.play_type_selected = QComboBox() self.play_type_selected.addItem('隨機播放') self.play_type_selected.addItem('順序播放') self.start_btn = QPushButton() self.start_btn.setText('開始播放') self.start_btn.clicked.connect(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) def music_file_btn_click(self): dir = QFileDialog.getExistingDirectory(self, "選擇資料夾", os.getcwd()) self.music_file_path.setText(dir) def start_btn_click(self): self.start_btn.setEnabled(False) self.thread_.start() def finished(self,finished): if finished is True: self.start_btn.setEnabled(True) # 最後,使用mian函數將介面佈局的整個過程加入到主體迴圈中就大功告成了。 if __name__ == '__main__': app = QApplication(sys.argv) w = CandyWindow.createWindow(MusicUI(), theme='blue', title='本地音樂播放器 公眾號:[Python 集中營]', ico_path='音樂.ico') w.show() sys.exit(app.exec_())
完整程式碼
# -*- coding:utf-8 -*- # @author Python 集中營 # @date 2022/4/23 # @file test10.py # done # python 本地音樂播放器製作過程(附完整原始碼) # 文摘:通過pyqt5多執行緒製作簡單的本地音樂播放器... # 製作這個播放器的目的是為了將下載下來的mp3檔案進行隨機或是順序的播放。選擇需要播放的音樂的路徑,選擇播放方式, # 經過測試可以完美的播放本地音樂。 # 在開始之前介紹一個免費下載mp3音樂的網站,有需要的可以下載自己喜歡的音樂。當然有各大音樂平臺會員的大佬就不需要了。 # http://music.y444.cn/ # 缺少音樂素材的可以去免費下載即可,準備好音樂素材後將其放到一個資料夾下面即可。 # 在應用實現過程中,總共使用了下面這些庫,特別需要注意的是這個庫playsound使用的版本是1.3.0,聽說其他版本在播放音樂時可能存在問題。 # 也可以將播放音樂的部分換成其他的實現方式。 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import sys from QCandyUi import CandyWindow import random, os from playsound import playsound # 最先實現的是播放音樂的業務邏輯,這裡是採用pyqt5自帶的QThread執行緒來實現的,目的是將播放音樂的部分 # 作為一個子執行緒來執行,防止與UI介面的主執行緒產生阻塞。 # 實現子執行緒的部分是一樣的正規化,一般情況下按照這種正規化實現,屢試不爽。在前面的UI桌面應用中幾乎都是使用這種方式來實現多執行緒的。 class PlayThread(QThread): finished = pyqtSignal(bool) def __init__(self, parent=None): super(PlayThread, self).__init__(parent) self.parent = parent self.working = True def __del__(self): self.working = False self.wait() def run(self): music_files = os.listdir(self.parent.music_file_path.text()) print(music_files) for index in range(0, len(music_files) - 1): if self.parent.play_type_selected.currentText() == '隨機播放': 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介面的部分。應用就是簡單的設計了一下不是很複雜。 # 音樂播放器UI.png # pyqt5的UI介面的實現方式主要是元件的佈局和槽函數的參照,下面是UI介面佈局及各個槽函數的初始化及參照。 # 以及如何介面的主執行緒中呼叫子執行緒的使用。 class MusicUI(QWidget): def __init__(self): super(MusicUI, self).__init__() self.init_ui() def init_ui(self): self.setWindowTitle('本地音樂播放器 公眾號:[Python 集中營]') self.setWindowIcon(QIcon('音樂.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('路徑') 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() self.play_type_selected = QComboBox() self.play_type_selected.addItem('隨機播放') self.play_type_selected.addItem('順序播放') self.start_btn = QPushButton() self.start_btn.setText('開始播放') self.start_btn.clicked.connect(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) def music_file_btn_click(self): dir = QFileDialog.getExistingDirectory(self, "選擇資料夾", os.getcwd()) self.music_file_path.setText(dir) def start_btn_click(self): self.start_btn.setEnabled(False) self.thread_.start() def finished(self,finished): if finished is True: self.start_btn.setEnabled(True) # 最後,使用mian函數將介面佈局的整個過程加入到主體迴圈中就大功告成了。 if __name__ == '__main__': app = QApplication(sys.argv) w = CandyWindow.createWindow(MusicUI(), theme='blue', title='本地音樂播放器 公眾號:[Python 集中營]', ico_path='音樂.ico') w.show() sys.exit(app.exec_())
以上就是基於Python實現本地音樂播放器的製作的詳細內容,更多關於Python本地音樂播放器的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45