前言
網易雲音樂,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教程。獲取方式,私信小編 “ 資料 ”,即可免費獲取哦!