主要内容 #
- 播放器的应用介绍
- 播放器功能的解构
- 播放器的界面设计
1. 播放器的应用介绍 #
该应用的主要功能是实现简易的音乐播放器。
程序主要包括音乐的展示列表、读取音乐文件、播放、上一曲、下一曲、播放模式等功能。
2. 播放器功能的解构 #
根据应用的功能说明,以下对音乐播放器的功能进行解构:
- 1,界面:需要一个网格布局(QGridLayout),用于展示音乐播放器的列表和常用按钮。
- 2,界面:需要一个列表widget(QListWidget),用于作为音乐播放器的音乐列表展示。
- 3,界面:需要两个滑动条(QSlider),用于作为音乐播放器的声音控制和播放进度展示。
- 4,界面:需要四个按钮(QPushButton),用于作为音乐播放器的控制按钮。
- 5,界面:需要一个下拉框列表(QComboBox),用于作为音乐播放器的播放模式选择。
- 6,功能:需要实现支持打开文件夹,显示播放列表,并且对音乐进行上一首或下一首切换的功能。
- 7,功能:需要实现音量大小和音乐播放进度的拖拽功能。
- 8,功能:需要实现播放模式的切换的功能。
3. 播放器的界面设计 #
以下程序对播放器界面的网格布局,列表,滑动条,按钮,以及下拉框列表进行设计。
import os import sys import time import random import configparser from PyQt5.QtGui import QIcon from PyQt5.QtCore import QUrl, Qt, QTimer from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog, QSlider, QLabel, QComboBox, QListWidget, QGridLayout, QMessageBox from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent class MusicPlayer(QWidget): """ 音乐播放器demo,仅供学习交流 """ def __init__(self): super().__init__() self.init() def init(self): """ 初始化 """ self.songs_list = [] # 音乐列表 self.song_formats = ['mp3', 'm4a', 'flac', 'wav', 'ogg'] # 音乐允许的格式 self.player = QMediaPlayer() # 播放器类 self.cur_path = os.path.abspath( os.path.dirname(__file__)) # 获取当前路径,方便打开文件夹找出音乐文件 self.cur_playing_song = '' # 当前播放音乐名称 self.is_switching = False self.is_pause = True # 是否暂停 # 界面元素:播放时间和进度条,音量控制,播放/暂停按钮,上一首按钮,下一首按钮,播放模式下拉框按钮,打开文件夹按钮,显示播放列表界面 # --播放时间 self.time_slider_1 = QLabel('00:00') # 播放时间显示 self.time_slider_2 = QLabel('00:00') # 总时长显示 # --播放进度控制 self.play_slider = QSlider(Qt.Horizontal, self) # 播放slider # --音量控制 self.volume_slider = QSlider(Qt.Horizontal, self) # 音量控制slider self.volume_slider.setFocusPolicy(Qt.NoFocus) # 不聚焦 self.volume_slider.setValue(30) # 初始值为30 # --播放按钮 self.play_button = QPushButton('播放', self) # 播放/暂停按钮 # --上一首按钮 self.preview_button = QPushButton('上一首', self) # 上一首按钮 # --下一首按钮 self.next_button = QPushButton('下一首', self) # 下一首按钮 # --打开文件夹按钮 self.open_button = QPushButton('打开文件夹', self) # 打开文件夹按钮 # --显示音乐列表 self.qlist = QListWidget() # 音乐列表 # --播放模式 self.cmb_mode = QComboBox() # 播放模式 self.cmb_mode.addItem('顺序播放') self.cmb_mode.addItem('单曲循环') self.cmb_mode.addItem('随机播放') # --计时器 self.timer = QTimer(self) # 设置计时器,当当前音乐播放结束之后,计时器timeout,之后根据播放模式跳到下一首 self.timer.start(1000) # 界面布局 self.grid = QGridLayout() # 网格布局 self.setLayout(self.grid) self.grid.addWidget(self.qlist, 0, 0, 5, 10) self.grid.addWidget(self.time_slider_1, 0, 11, 1, 1) self.grid.addWidget(self.play_slider, 0, 12, 1, 1) self.grid.addWidget(self.time_slider_2, 0, 13, 1, 1) self.grid.addWidget(self.volume_slider, 1, 11, 1, 4) self.grid.addWidget(self.play_button, 0, 14, 1, 1) self.grid.addWidget(self.next_button, 2, 13, 1, 2) self.grid.addWidget(self.preview_button, 2, 11, 1, 2) self.grid.addWidget(self.cmb_mode, 3, 11, 1, 2) self.grid.addWidget(self.open_button, 3, 13, 1, 2) # 主界面 self.setFocusPolicy(Qt.StrongFocus) # 设置焦点获取策略:支持tab和单击 self.setWindowTitle('音乐播放器v0.1.0') # 设置标题 self.setWindowIcon(QIcon('icon.ico')) # 设置图标 self.move(300, 150) self.show() # 展示界面 if __name__ == '__main__': app = QApplication(sys.argv) gui = MusicPlayer() sys.exit(app.exec_())
运行以上程序,观察音乐播放器的基本结构界面,后续课程将完善各个模块按钮的功能。
4. 小结 #
- 音乐播放器的功能。
- 音乐播放器功能的解构。
- 音乐播放器界面的设计。
习题 #
- 无