用Python编写一个音乐播放器。
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
介绍
你是否曾想过探索音乐与科技如何融合?在本文中,我们将踏上一段有趣的旅程,打造一款音乐爱好者会喜欢的音乐播放器,同时展示 Python 在音乐技术领域的强大功能。
我们做的可不是普通的音乐播放器。我们正在打造一款能让每个人都享受更优质、更流畅的音乐体验的工具。我们结合了 Python 和一些很棒的工具,比如用于界面设计的Tkinter 、用于播放音乐的pygame、用于文件管理的os以及用于模式匹配的fnmatch,最终打造出一款既实用又好玩的音乐播放器。
让我们一起深入探索 Python 编程,学习如何使用 Tkinter 创建界面,并使用 pygame 播放音乐。本文将作为您的指南,一步步引导您使用 Python 的魔力创建我们自己的音乐播放器。让我们看看如何将代码与旋律融合,打造酷炫的音乐体验。
搭建项目环境
在Visual Studio Code (VS Code)中工作时,为我们的音乐播放器项目创建一个新的Python文件。
将项目的不同部分放在不同的文件中会很有帮助。
创建一个新的Python应用程序:
为此,您可以先打开VS Code并创建一个新文件夹:
步骤 1
打开 VS Code
步骤 2
创建新文件夹
步骤 3
进入新创建的文件夹,创建一个名为 app.py 的新文件。
安装必要的库
在深入探讨技术细节之前,让我们先来安装和导入必要的库和模块。
首先,我们首先导入必要的库——Python中的pygame:
pip install pygame
步骤 1
我们将使用 Python 、 Tkinter、fnmatch、os和pygame来创建这个音乐播放器。
首先,我们需要导入所有必要的库和模块:
import tkinter as tk
import fnmatch
import os
from pygame import mixer
设计用户界面
所以,我们谈到这个的时候,基本上就是在设置屏幕上播放音乐时看到和使用的所有东西。你知道,比如弄清楚所有东西应该怎么显示,按钮放在哪里,滑块怎么工作,以及所有这些让你能够轻松流畅地使用音乐播放器的部分。
步骤 1
首先,我们通过创建所谓的“画布”来启动音乐播放器应用程序canvas。
这个画布就像主舞台,音乐播放器的所有交互元素都将在此呈现。我们通过调用 Tkinter 窗口实例来实现这一点tk.Tk():
canvas = tk.Tk( )
步骤 2
Music Player接下来,我们通过设置画布的标题来赋予它独特的标识canvas.title("Music Player")。该标题就像窗口顶部的欢迎标志,让用户清楚地了解此应用程序的功能:
canvas.title("Music Player")
步骤 3
为了确保音乐播放器在屏幕上占据合适的空间,我们使用 . 来指定窗口的尺寸canvas.geometry('600x800')。这一步骤使我们能够微调界面的宽度和高度,从而获得最佳的用户体验:
canvas.geometry(''600x800")
第四步
接下来,我们要更改画布的背景颜色。通过将窗口的背景颜色更改为时尚的黑色canvas.config(bg='black'),我们可以为音乐播放器增添一丝优雅的气息。这为简洁现代的设计奠定了基础:
canvas.config(bg = 'black')
第五步
最后,让我们保存并运行代码:
canvas.mainloop( )
加载和显示音乐文件
加载和显示音乐文件就像搭建后台区域,让音乐播放器知道要播放哪些歌曲以及在屏幕上的哪个位置显示它们。
想象一下,这就像把你的音乐收藏整理成一个整齐的图书馆,方便取用和欣赏。
步骤 1
在这一步中,我们要显示特定文件夹中的音乐。你可以把它想象成告诉音乐播放器歌曲的位置。就像你告诉朋友如何找到你家一样。这里rootpath用一个字段来表示音乐文件夹的位置(路径)。在本例中:
rootpath = "C:\\Users\evane\Desktop\music"
步骤 2
现在,我们需要确保音乐播放器只从文件夹中选择 mp3 文件。这相当于告诉它忽略所有其他类型的文件。我们pattern为此特定文件类型创建一个变量:
pattern = "*.mp3"
步骤 3
在这里,我们创建一个空间来显示歌曲列表,就像设置显示歌曲的屏幕一样。这是我们的listBox:
listBox = tk.Listbox( canvas, fg = "cyan", bg = "black", width = 100, font = ('ds-digital', 14))
listBox.pack (padx= 15, pady= 15)
第四步
接下来,我们要浏览音乐文件夹,逐个检查文件。这就像翻阅你的音乐收藏,用冒号 ( for loop:)检查文件夹中的每一首歌。
for root, dirs, files in os.walk(rootpath) :
for filename in fnmatch.filter(files, pattern)
listBox.index( 'end', filename )
第五步
保存并运行,即可在音乐播放器列表框中查看所有 mp3 文件。
设计简洁直观的用户界面:按钮、播放列表显示
当我们说我们正在用 Python 构建一个音乐播放器,并专注于设计一个简洁直观的用户界面,带有按钮和播放列表显示时,我们本质上的目标是创建一个外观漂亮、易于导航,并且能够让您轻松管理音乐收藏的程序。
步骤 1
在此步骤中,我们将设置一个标签,用于在界面上显示选定的歌曲。我们将创建一个变量,label其中包含特定的文本、背景颜色、前景色和字体:
Label = tk.Label(canvas, text = ' ', bg = 'black' fg = 'yelow', font = ('ds-digital', 18)
步骤 2
创建标签后,我们需要将其显示在画布上。为此,我们使用以下pack方法将标签放置在画布上,并添加一些内边距:
Label = tk.Label(canvas, text = ' ', bg = 'black' fg = 'yelow', font = ('ds-digital', 18)
Label.pack( pady = 15 )
步骤 3
在这里,我们创建一个名为top“标签”的框架,用于水平排列标签。该框架还将用于容纳其他元素,例如按钮:
top = tk.Frame(canvas bg ="black")
top.pack(padx = 10, pady = 5, anchor = 'center')
第四步
接下来,我们将添加一个名为“跳到上一首歌”的按钮prevButton,允许用户跳到上一首歌:
prevButton = tk.Buttons(canvas, text = "Prev")
第五步
我们正在打包prevButton以便在界面上显示,我们希望确保它出现在框架的左侧top:
prevButton = tk.Buttons(canvas, text = "Prev")
prevButton.pack(pady = 15, in_ = top, side = 'left')
stopButton = tk.Buttons(canvas, text = "Stop")
prevButton.pack(pady = 15, in_ = top, side = 'left')
步骤 6
接下来,我们给按钮添加一些图片,让它界面更美观。我们已经下载了一些图片。
要使用此功能,我们需要选择所有图标并复制它们,然后右键单击您一开始创建的 Python 文件,单击“在文件资源管理器中显示”,然后粘贴图标。
接下来,你的图标应该会显示在你 VS Code 中创建的 Python 文件下方。
步骤 7
在这里,我们使用以下类从磁盘上的图像文件加载图像,从而初始化按钮的图像tk.PhotoImage:
prev_img = tk.PhotoImage(file = " prev_img.png ")
stop_img = tk.PhotoImage(file = " stop_img.png ")
play_img = tk.PhotoImage(file = " play_img.png ")
pause_img = tk.PhotoImage(file = " pause_img.png ")
next_img = tk.PhotoImage(file = " next_img.png ")
第 8 步
现在图像已经初始化完毕,我们将每个图像添加到其对应的按钮中,以直观地表示上一曲、停止、播放、暂停和下一曲等功能:
prevButton = tk.Buttons(canvas, text = "Prev", image = prev_img, bg = 'black', borderwidth = 0 )
prevButton.pack(pady = 15, in_ = top, side = 'left') `
` stopButton = tk.Buttons(canvas, text = "Stop", image = stop_img, bg = 'black', borderwidth = 0 )
stopButton.pack(pady = 15, in_ = top, side = 'left') `
` playButton = tk.Buttons(canvas, text = "Play", image = play_img, bg = 'black', borderwidth = 0 )
playButton.pack(pady = 15, in_ = top, side = 'left') `
` pauseButton = tk.Buttons(canvas, text = "Pause", image = pause_img, bg = 'black', borderwidth = 0 )
pauseButton.pack(pady = 15, in_ = top, side = 'left') `
` nextButton = tk.Buttons(canvas, text = "Next", image = next_img, bg = 'black', borderwidth = 0)
nextButton.pack(pady = 15, in_ = top, side = 'left')
步骤 9
现在,让我们保存并运行代码。
实现核心功能
在实现核心功能时,我们将编写代码来处理播放歌曲、暂停、跳过曲目、创建播放列表等关键操作。这些基础代码将是我们音乐播放器的骨架,使用户能够流畅地与之交互。
步骤 1
在此步骤中,我们计划创建一个名为 `is` 的新方法select(),用于处理选择和播放歌曲时的功能:
def select( ) :
步骤 2
当我们从列表中选择一首歌曲并点击播放按钮时,标签内应该显示歌曲名称,并且歌曲应该播放:
def select( ) :
label.config(text = listBox.get("anchor"))
步骤 3
选好歌曲并更新标签后,我们将使用它mixer.music.load()来加载歌曲并mixer.music.play()开始播放:
def select( ) :
label.config(text = listBox.get("anchor"))
mixer.music.load( rootpath + " \\ " + listBox.get("anchor"))
mixer.music.play( )
第四步
接下来,我们将初始化混合器:
mixer.init ()
第五步
为了设置Play按钮,我们将创建一个包含图像的按钮控件。当点击此按钮时,它应该调用相应的select()方法。这样,每当我们点击按钮时,它都会触发该select()方法:
playButton = tk.Buttons(canvas, text = "Play", image = play_img, bg = 'black', borderwidth = 0, command = select )
playButton.pack(pady = 15, in_ = top, side = 'left')
步骤 6
我们将定义一个名为 `stop` 的新方法stop(),该方法将停止当前正在播放的歌曲:
def stop( ) :
mixer.music.stop( )
步骤 7
当我们按下停止按钮时,我们会确保清除列表中当前播放歌曲的选择。这样,用户将看到一个干净的列表,停止播放音乐后,不会有任何歌曲被选中或高亮显示。
这是朝着为用户提供流畅、直观的应用程序使用体验迈出的虽小但重要的一步:
listBox.select_clear('active')
第 8 步
为了给歌曲添加停止按钮,我们将在代码中创建另一个按钮并将其与该stop()方法关联。当我们点击这个停止按钮时,它将调用该stop()方法来停止歌曲:
stopButton = tk.Buttons(canvas, text = "Stop", image = stop_img, bg = 'black', borderwidth = 0, command = stop)
stopButton.pack(pady = 15, in_ = top, side = 'left')
步骤 9
接下来,我们将创建一个名为 `get_n_solo()` 的方法play_next(),该方法将帮助我们准备播放列表中的下一首歌曲。首先,我们需要确保已做好处理下一首歌曲的准备:
def play_next ( ):
next_song = listBox.curselection()
next_song = next_song[0] +1
第十步
获取下一首歌曲的歌名并将其更新到标签中:
next_song_name = listBox.get(next_song)
label.config(text = next_song_name)
第 11 步
接下来,我们还需要播放下一首歌,为此:
mixer.music.load( rootpath + " \\ " + next_song_name)
mixer.music.play( )
第 12 步
现在,我们要清除当前选择,切换到下一首歌曲,并将列表更新为只显示下一首正在播放的歌曲:
listBox.select_clear(0,'end')
listBox.activate(next_song)
listen.select_set(next_song)
第 13 步
接下来,为了创建一个点击后播放下一首歌曲的按钮,我们将使用该play_next()方法。我们将为该按钮添加一个事件监听器,以便在点击按钮时play_next()激活该方法:
nextButton = tk.Buttons(canvas, text = "Next", image = next_img, bg = 'black', borderwidth = 0, command = play_next)
nextButton.pack(pady = 15, in_ = top, side = 'left')
第 14 步
接下来,我们继续研究play_prev button,并定义一个新方法:
def play_prev( ):
prev_song = listBox.curselection()
prev_song = next_song[0] - 1
第15步
我们想获取歌曲名称prev_song并将其显示在标签中:
prev_song_name = listBox.get(prev_song)
label.config(text = prev_song_name)
第16步
接下来,我们要播放下一首歌,具体操作如下:
mixer.music.load( rootpath + " \\ " + prev_song_name)
mixer.music.play( )
第 17 步
在这一步中,我们希望将鼠标悬停在选定的歌曲上prev_song:
listBox.select_clear(0,'end')
listBox.activate(prev_song)
listen.select_set(prev_song)
第18步
接下来,我们需要将以下命令添加到“上一页”按钮中:
prevButton = tk.Buttons(canvas, text = "Prev", image = prev_img, bg = 'black', borderwidth = 0, command = play_prev )
prevButton.pack(pady = 15, in_ = top, side = 'left')
第 19 步
接下来,我们将通过定义一个新方法来处理暂停按钮:
def pause_song( ):
第20步
我们需要编写一个条件语句来检查歌曲的状态。如果歌曲处于暂停状态,我们就播放歌曲;如果歌曲正在播放,我们就暂停歌曲。我们将使用条件语句来实现这一点:
def pause_song( ):
if pauseButton["text"] == "Pause"
mixer.music.pause()
pauseButton["text"] = "Play"
else:
mixer.music.unpause()
pauseButton["text"] = "Puse"
第21步
最后,我们将这条命令添加到暂停按钮中:
pauseButton = tk.Buttons(canvas, text = "Pause", image = pause_img, bg = 'black', borderwidth = 0, command = pause_song )
pauseButton.pack(pady = 15, in_ = top, side = 'left')
第22步
最后,让我们保存并运行代码,看看我们生成的简单音乐播放器。
结论
对于热爱音乐并渴望深入学习编程的人来说,用 Python 构建音乐播放器是一段充满乐趣的旅程。借助 Python 以及 Tkinter 和 Pygame 等优秀的库,您可以打造拥有炫酷界面的个性化音乐播放器。正确搭建项目环境至关重要,这样才能将所有需要的工具和库集中在一起。
打造用户友好的界面至关重要,这样你的音乐播放器才能美观易用。加载和显示音乐文件、添加按钮以及创建播放列表,这些都能让你的音乐播放器运行流畅。别忘了添加播放、暂停、跳过和停止等基本按钮,确保你的音乐播放器能够完美地完成它的工作。
总而言之,这个项目能让你将对音乐的热情与编程结合起来,同时学习如何使用 Python 创建应用程序。按照以下步骤创建你的音乐播放器,你将获得编码、界面设计和构建实际应用程序的实践经验。尽情享受创作的过程吧!
文章来源:https://dev.to/spiff/build-a-music-player-with-python-3pd2










