你喜欢的音乐不在同一平台怎么办?Python教你实现一款专属播放器

前言

网易云音乐,QQ音乐,酷狗音乐,是我们经常会用到的音乐软件,当然有时候我们因为一首歌,需要在各大音乐平台上跳转,那么我们完全可以使用python自己打造一款音乐播放器

知识点:

python基础知识

requests库

time

pygame

tkinter

线程

环境:

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最新学习资料,有需要的小伙伴请关注小编,并加微信:bjmsb1 来免费领取吧~~~

你可能感兴趣的:(你喜欢的音乐不在同一平台怎么办?Python教你实现一款专属播放器)