喜歡的歌曲不在一個平臺怎麼辦?你需要一個自己專屬的音樂播放器

喜歡的歌曲不在一個平臺怎麼辦?你需要一個自己專屬的音樂播放器

 

 

前言

網易雲音樂,QQ音樂,酷狗音樂,是我們經常會用到的音樂軟件,當然有時候我們因爲一首歌,需要在各大音樂平臺上跳轉,那麼我們完全可以使用python自己打造一款音樂播放器

知識點:
1.python基礎知識
2.requests庫
3.time
4.pygame
5.tkinter
6.線程

環境:

windows + pycharm + python3

適合零基礎的同學

1、導入工具

from PyQt5 import QtWidgets,QtGui,QtCore
from PyQt5.QtMultimedia import QMediaContent,QMediaPlayer
import qtawesome as qta
import requests,traceback

2、創建一個類

class Music(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        # 窗口大小
        self.setFixedSize(400,200)
        # 標題
        self.setWindowTitle("Mark")
        # 初始化界面
        self.init_ui()
        # 設置樣式
        self.custom_style()
        #
        self.playing = False # 播放狀態初始化爲否
        self.player = QMediaPlayer(self)

        self.timer = QtCore.QTimer()
        self.timer.setInterval(1000)
        self.timer.start()
        self.timer.timeout.connect(self.check_music_status)

3、設置樣式

def custom_style(self):
        self.setStyleSheet('''
            #main_widget{
                border-radius:5px;
            }
            #play_btn,#pervious_btn,#next_btn{
                border:none;
            }
            #play_btn:hover,#pervious_btn:hover,#next_btn:hover{
                background:gray;
                border-radius:5px;
                cursor:pointer;
            }
        ''')
        self.close_btn.setStyleSheet('''
            QPushButton{
                background:#F76677;
                border-radius:5px;
                }
            QPushButton:hover{
                background:red;
                }''')
        self.status_label.setStyleSheet('''
            QLabel{
                background:#F7D674;
                border-radius:5px;
                }
        ''')

4、初始化UI界面

def init_ui(self):
        # 窗口布局
        self.main_widget = QtWidgets.QWidget()
        self.main_widget.setObjectName("main_widget")
        self.main_layout = QtWidgets.QGridLayout()
        self.main_widget.setLayout(self.main_layout)

        # 標題
        self.title_lable = QtWidgets.QLabel("樂者,音之所由生也")

        # 關閉按鈕
        self.close_btn = QtWidgets.QPushButton("")  # 關閉按鈕
        self.close_btn.clicked.connect(self.close_btn_event)
        self.close_btn.setFixedSize(15,15)

        # 音樂狀態按鈕
        self.status_label = QtWidgets.QLabel("")
        # self.swith_btn.clicked.connect(self.swith_background)
        self.status_label.setFixedSize(15,15)

        # 播放按鈕
        play_icon = qta.icon("fa.play-circle",)
        self.play_btn = QtWidgets.QPushButton(play_icon,"")
        self.play_btn.setIconSize(QtCore.QSize(80, 80))
        self.play_btn.setFixedSize(82,82)
        self.play_btn.setObjectName("play_btn")
        self.play_btn.clicked.connect(self.play_music)

        # 下一首按鈕
        next_icon = qta.icon("fa.play-circle-o")
        self.next_btn = QtWidgets.QPushButton(next_icon,"")
        self.next_btn.setIconSize(QtCore.QSize(80,80))
        self.next_btn.setFixedSize(82,82)
        self.next_btn.setObjectName("next_btn")
        self.next_btn.clicked.connect(self.next_music)

        # 進度條
        self.process_bar = QtWidgets.QProgressBar()
        self.process_value = 0
        self.process_bar.setValue(self.process_value)
        self.process_bar.setFixedHeight(5)
        self.process_bar.setTextVisible(False)

        self.main_layout.addWidget(self.close_btn,0,0,1,1)
        self.main_layout.addWidget(self.title_lable,0,1,1,1)
        self.main_layout.addWidget(self.status_label,1,0,1,1)
        self.main_layout.addWidget(self.play_btn, 1, 1, 1, 1)
        self.main_layout.addWidget(self.next_btn, 1, 2, 1, 1)
        self.main_layout.addWidget(self.process_bar,2,0,1,3)

        self.setCentralWidget(self.main_widget)

        # self.setWindowOpacity(0.9) # 設置窗口透明度
        # self.setAttribute(QtCore.Qt.WA_TranslucentBackground)  # 設置窗口背景透明
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)  # 隱藏邊框

5、播放器各功能設置

# 關閉程序
    def close_btn_event(self):
        self.close()

    # 鼠標長按事件
    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self.m_drag = True
            self.m_DragPosition = event.globalPos() - self.pos()
            event.accept()
            self.setCursor(QtGui.QCursor(QtCore.Qt.OpenHandCursor))

    # 鼠標移動事件
    def mouseMoveEvent(self, QMouseEvent):
        if QtCore.Qt.LeftButton and self.m_drag:
            self.move(QMouseEvent.globalPos() - self.m_DragPosition)
            QMouseEvent.accept()

    # 鼠標釋放事件
    def mouseReleaseEvent(self, QMouseEvent):
        self.m_drag = False
        self.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))

    # 播放音樂
    def play_music(self):
        try:
            # 播放音樂
            if self.playing is False:
                self.playing = True # 設置播放狀態爲是
                self.play_btn.setIcon(qta.icon("fa.pause-circle")) # 設置播放圖標
                player_status = self.player.mediaStatus() # 獲取播放器狀態
                # print("當前播放狀態:",player_status)
                if player_status == 6:
                    # 設置狀態標籤爲綠色
                    self.status_label.setStyleSheet('''QLabel{background:#6DDF6D;border-radius:5px;}''')
                    self.player.play()
                else:
                    self.next_music()
            # 暫停音樂
            else:
                # 設置狀態爲藍色
                self.status_label.setStyleSheet('''QLabel{background:#0099CC;border-radius:5px;}''')
                self.playing = False
                self.play_btn.setIcon(qta.icon("fa.play-circle"))
                self.player.pause()
        except Exception as e:
            print(repr(e))

    # 下一首音樂
    def next_music(self):
        try:
            # 設置狀態爲黃色
            self.status_label.setStyleSheet('''
                QLabel{
                    background:#F7D674;
                    border-radius:5px;
                    }
            ''')
            self.playing = True  # 設置播放狀態爲是
            self.play_btn.setIcon(qta.icon("fa.pause-circle"))  # 修改播放圖標
            self.process_value = 0  # 重置進度值

            # 獲取網絡歌曲
            self.get_music_thread = GetMusicThread()
            self.get_music_thread.finished_signal.connect(self.init_player)
            self.get_music_thread.start()
        except Exception as e:
            print(traceback.print_exc())

    # 設置播放器
    def init_player(self,url):
        # print("獲取到音樂鏈接:",url)
        content = QMediaContent(QtCore.QUrl(url))
        self.player.setMedia(content)
        self.player.setVolume(50)
        self.player.play()
        self.duration = self.player.duration()  # 音樂的時長
        # 設置狀態爲綠色
        self.status_label.setStyleSheet('''
            QLabel{
                background:#6DDF6D;
                border-radius:5px;
                }
        ''')

        # 進度條計時器
        self.process_timer = QtCore.QTimer()
        self.process_timer.setInterval(1000)
        self.process_timer.start()
        self.process_timer.timeout.connect(self.process_timer_status)

    # 定時器
    def check_music_status(self):
        player_status = self.player.mediaStatus()
        player_duration = self.player.duration()
        # print("音樂時間:",player_duration)
        # print("當前播放器狀態",player_status)
        if player_status == 7:
            self.next_music()

        if player_duration > 0:
            self.duration = player_duration

    # 進度條定時器
    def process_timer_status(self):
        try:
            if self.playing is True:
                self.process_value += (100 / (self.duration/1000))
                # print("當前進度:",self.process_value)
                self.process_bar.setValue(self.process_value)
        except Exception as e:
            print(repr(e))

運行代碼, 效果如下圖:

 

喜歡的歌曲不在一個平臺怎麼辦?你需要一個自己專屬的音樂播放器

 

 

喜歡的歌曲不在一個平臺怎麼辦?你需要一個自己專屬的音樂播放器

 

如果你處於想學Python或者正在學習Python,Python的教程不少了吧,但是是最新的嗎?說不定你學了可能是兩年前人家就學過的內容,在這小編分享一波2020最新的Python教程。獲取方式,私信小編 “ 資料 ”,即可免費獲取哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章