python 本地音樂播放器制作過程

制作這個(gè)播放器的目的是為了將下載下來的mp3文件進(jìn)行隨機(jī)或是順序的播放冠摄。選擇需要播放的音樂的路徑,選擇播放方式几缭,經(jīng)過測試可以完美的播放本地音樂河泳。

【閱讀全文】

在開始之前介紹一個(gè)免費(fèi)下載mp3音樂的網(wǎng)站,有需要的可以下載自己喜歡的音樂年栓。當(dāng)然有各大音樂平臺會員的大佬就不需要了拆挥。

http://music.y444.cn/#/

缺少音樂素材的可以去免費(fèi)下載即可,準(zhǔn)備好音樂素材后將其放到一個(gè)文件夾下面即可某抓。

在應(yīng)用實(shí)現(xiàn)過程中纸兔,總共使用了下面這些庫,特別需要注意的是這個(gè)庫playsound使用的版本是1.3.0否副,聽說其他版本在播放音樂時(shí)可能存在問題汉矿。也可以將播放音樂的部分換成其他的實(shí)現(xiàn)方式。

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

最先實(shí)現(xiàn)的是播放音樂的業(yè)務(wù)邏輯备禀,這里是采用pyqt5自帶的QThread線程來實(shí)現(xiàn)的洲拇,目的是將播放音樂的部分作為一個(gè)子線程來運(yùn)行奈揍,防止與UI界面的主線程產(chǎn)生阻塞。

實(shí)現(xiàn)子線程的部分是一樣的范式赋续,一般情況下按照這種范式實(shí)現(xiàn)男翰,屢試不爽。在前面的UI桌面應(yīng)用中幾乎都是使用這種方式來實(shí)現(xiàn)多線程的蚕捉。

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() == '隨機(jī)播放':
                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)

音樂播放的業(yè)務(wù)邏輯實(shí)現(xiàn)完成了奏篙,接下來來實(shí)現(xiàn)UI界面的部分。應(yīng)用就是簡單的設(shè)計(jì)了一下不是很復(fù)雜迫淹。

file

pyqt5的UI界面的實(shí)現(xiàn)方式主要是組件的布局和槽函數(shù)的引用秘通,下面是UI界面布局及各個(gè)槽函數(shù)的初始化及引用。以及如何界面的主線程中調(diào)用子線程的使用敛熬。

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('隨機(jī)播放')
        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函數(shù)將界面布局的整個(gè)過程加入到主體循環(huán)中就大功告成了。
if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = CandyWindow.createWindow(MusicUI(), theme='blue', title='本地音樂播放器  公眾號:[Python 集中營]',
                                 ico_path='音樂.ico')
    w.show()
    sys.exit(app.exec_())

完整源代碼已經(jīng)保存在百度網(wǎng)盤上面应民,將上述代碼塊全部copy到開發(fā)中運(yùn)行即可话原,或者在公眾號內(nèi)回復(fù)'1002'獲取下載鏈接直接下載.py文件到開發(fā)工具運(yùn)行也是可以的。

創(chuàng)作不易诲锹,歡迎大家積極提問繁仁,有python相關(guān)的問題請留言,看到即回復(fù)归园,感謝大家一直的支持黄虱!

【往期精彩】

自動(dòng)化工具:PyAutoGUI的鼠標(biāo)與鍵盤控制,解放雙手的利器庸诱!

來自程序猿的生日蛋糕你見過嗎捻浦?

懶人python操作,代碼中永遠(yuǎn)只需要導(dǎo)入一個(gè)庫...

自動(dòng)化辦公:手機(jī)號碼提取器桥爽,使用正則表達(dá)式輕松提取文本文件中的手機(jī)號碼...

剛剛發(fā)現(xiàn)的可視化動(dòng)態(tài)圖庫ipyvizzu朱灿,太好看了!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钠四,一起剝皮案震驚了整個(gè)濱河市盗扒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌环疼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朵耕,死亡現(xiàn)場離奇詭異炫隶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阎曹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門伪阶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煞檩,“玉大人,你說我怎么就攤上這事栅贴≌迮龋” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵檐薯,是天一觀的道長凝赛。 經(jīng)常有香客問我,道長坛缕,這世上最難降的妖魔是什么墓猎? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮赚楚,結(jié)果婚禮上毙沾,老公的妹妹穿的比我還像新娘。我一直安慰自己宠页,他們只是感情好左胞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著举户,像睡著了一般烤宙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俭嘁,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天门烂,我揣著相機(jī)與錄音,去河邊找鬼兄淫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蔓姚,可吹牛的內(nèi)容都是我干的捕虽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼坡脐,長吁一口氣:“原來是場噩夢啊……” “哼泄私!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起备闲,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤晌端,失蹤者是張志新(化名)和其女友劉穎位岔,沒想到半個(gè)月后座云,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乱顾,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹬音,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年赚抡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了板辽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剿干。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡担神,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出演痒,到底是詐尸還是另有隱情亲轨,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布鸟顺,位于F島的核電站惦蚊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讯嫂。R本人自食惡果不足惜蹦锋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望端姚。 院中可真熱鬧晕粪,春花似錦、人聲如沸渐裸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昏鹃。三九已至尚氛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洞渤,已是汗流浹背阅嘶。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留载迄,地道東北人讯柔。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像护昧,于是被迫代替她去往敵國和親魂迄。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 序言 清明時(shí)節(jié)雪紛紛鄙人生性畏寒冷宅臥室中空寂聊如何解遂寫此音樂播放的大體結(jié)構(gòu) 正題 整體的框架 項(xiàng)目地址:htt...
    buzuibugui閱讀 737評論 2 0
  • 本文將引導(dǎo)大家做一個(gè)音樂播放器惋耙,在做這個(gè)Android開發(fā)實(shí)例的過程中捣炬,能夠幫助大家進(jìn)一步熟悉和掌握學(xué)過的List...
    kingZXY2009閱讀 3,134評論 1 5
  • 最近一直在做音頻播放器的改版重構(gòu),開發(fā)測試到最后發(fā)布用時(shí)差不多要一個(gè)月绽榛,功能上可能并不是很多湿酸,跟大多數(shù)音樂播放器一...
    大馮宇宙閱讀 5,926評論 1 2
  • 本人初學(xué)Android,最近做了一個(gè)實(shí)現(xiàn)安卓簡單音樂播放功能的播放器灭美,收獲不少推溃,于是便記錄下來自己的思路與知識總結(jié)...
    落日柳風(fēng)閱讀 19,080評論 2 41
  • 相信大家不想再去了解那些本地音樂的了 其實(shí)網(wǎng)絡(luò)獲取音樂也沒有那么復(fù)雜 你只需要有一個(gè)自己uri所謂的網(wǎng)址 但必須只...
    WangYouHu閱讀 2,384評論 0 4