python怎么发音乐-用python打造自己专属的音乐播放器

网易云音乐,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))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值