Python功能制作之简单的音乐播放器

本文介绍了如何使用Python的PyQt5库创建一个基本的音乐播放器,包括歌曲列表、播放/暂停功能、进度条和状态显示。用户可以通过双击列表中的歌曲进行播放,也可通过空格键或暂停/播放按钮控制音乐播放。
摘要由CSDN通过智能技术生成

需要导入的库:

pip install PyQt5

源码:

import os
from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QSlider, QListWidget, QVBoxLayout, QWidget, QPushButton

class MusicPlayer(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Music Player")
        self.setWindowIcon(QIcon("icon.png"))
        self.resize(800, 600)

        self.current_song = None
        self.playing = False

        self.song_list_view = QListWidget()
        self.song_list_view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

        self.current_song_label = QLabel()
        self.current_song_label.setAlignment(Qt.AlignCenter)
        self.current_song_label.setPixmap(QPixmap("default.jpg"))

        self.progress_slider = QSlider(Qt.Horizontal)
        self.progress_slider.setEnabled(False)

        self.play_button = QPushButton()
        self.play_button.setIcon(QIcon("play.png"))
        self.play_button.clicked.connect(self.play_or_pause)

        layout = QVBoxLayout()
        layout.addWidget(self.song_list_view)
        layout.addWidget(self.current_song_label)
        layout.addWidget(self.progress_slider)
        layout.addWidget(self.play_button)

        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.player = QMediaPlayer()
        self.player.stateChanged.connect(self.update_playback_state)

        self.load_song_list()

    def load_song_list(self):
        song_list = os.listdir("video")
        self.song_list_view.clear()
        self.song_list_view.addItems(song_list)
        self.song_list_view.itemDoubleClicked.connect(self.play_song)

    def play_song(self, item):
        song_name = item.text()
        if self.current_song:
            self.player.stop()
            self.current_song = None
        self.player.setMedia(QMediaContent(QUrl.fromLocalFile("video/{}".format(song_name))))
        self.current_song = song_name
        self.player.play()
        self.playing = True
        self.current_song_label.setPixmap(QPixmap("video/{}.jpg".format(song_name.split(".")[0])))
        self.setWindowTitle("Music Player - {}".format(song_name.split(".")[0]))
        self.play_button.setIcon(QIcon("pause.png"))  # 更新播放按钮的图标为暂停图标

    def stop_song(self):
        self.player.stop()
        self.current_song = None
        self.playing = False
        self.current_song_label.setPixmap(QPixmap("default.jpg"))
        self.setWindowTitle("Music Player")
        self.play_button.setIcon(QIcon("play.png"))  # 更新播放按钮的图标为播放图标

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Space:
            if self.current_song:
                if self.playing:
                    self.player.pause()
                    self.playing = False
                    self.play_button.setIcon(QIcon("play.png"))  # 更新播放按钮的图标为播放图标
                else:
                    self.player.play()
                    self.playing = True
                    self.play_button.setIcon(QIcon("pause.png"))  # 更新播放按钮的图标为暂停图标

    def play_or_pause(self):
        if self.current_song:
            if self.playing:
                self.player.pause()
                self.playing = False
                self.play_button.setIcon(QIcon("play.png"))  # 更新播放按钮的图标为播放图标
            else:
                self.player.play()
                self.playing = True
                self.play_button.setIcon(QIcon("pause.png"))  # 更新播放按钮的图标为暂停图标

    def update_playback_state(self, state):
        if state == QMediaPlayer.PlayingState:
            self.playing = True
            self.setWindowTitle("Music Player - Playing")
        elif state == QMediaPlayer.PausedState:
            self.playing = False
            self.setWindowTitle("Music Player - Paused")
        elif state == QMediaPlayer.StoppedState:
            self.playing = False
            self.setWindowTitle("Music Player")

    def closeEvent(self, event):
        self.player.stop()
        event.accept()

if __name__ == "__main__":
    app = QApplication([])
    player = MusicPlayer()
    player.show()
    app.exec()

效果:

双击列表歌曲即播放。

按住下面的暂停和播放【需要图标】【空格也可以】

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多方通行8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值