酷炫音乐盒: 使用Python和Tkinter配合Pygame打造自己的音乐播放器

在这里插入图片描述
Python的Tkinter(Tk接口)是一个用于创建图形用户界面(GUI)的标准库。它是Python的内置模块,无需额外安装即可使用。Tkinter提供了一组部件(如按钮、标签、文本框等)和布局管理器,使开发GUI应用程序变得简单和便捷。

Tkinter是一个功能强大且简单易用的库,适合构建轻量级的GUI应用程序。它在不同的操作系统上具有相同的外观和行为,因此可以实现跨平台的应用程序。

展示效果

在这里插入图片描述
在这里插入图片描述

界面实现

导入所需的库

import tkinter as tk  # 导入tkinter库用于创建图形用户界面
from pygame import mixer  # 从pygame库导入mixer模块用于音乐播放
import os  # 导入os模块用于文件和目录操作
from PIL import Image, ImageTk  # 导入PIL库用于处理图片

注意:os模块是自带的,另外的两个都需要安装

创建窗口

# 创建主窗口
root = tk.Tk()  # 实例化Tk类
root.title('音乐播放器')  # 设置窗口标题
root.resizable(False, False) # 禁止修改窗口大小
root.geometry('440x570+200+200')  # 设置窗口大小和位置
root.iconbitmap('music.ico')  # 设置窗口图标
root['background'] = '#6176d5'  # 设置背景颜色

设置底色和图标

# 加载并显示封面图片
img = Image.open('bg.png')  # 打开封面图片
img = ImageTk.PhotoImage(img.resize((300,300)))  # 调整图片大小并转换为Tkinter可用的格式
tk.Label(root, image=img, bg='#7184e4').pack(pady=10)  # 在窗口中显示图片

在这里插入图片描述

添加功能按钮

# 创建按钮框架和按钮
frame_1 = tk.Frame(bg='#6175d6')  # 创建一个框架用于按钮
frame_1.pack(pady=10)  # 在窗口中放置框架

# 创建上一首、播放、下一首按钮
tk.Button(frame_1, text='上一首', font=('黑体', 15), fg='#f6f5f3', bg='#6175d6', relief='flat', command=last).pack(side=tk.LEFT)
tk.Button(frame_1, text='播放', font=('黑体', 15), fg='#f6f5f3', bg='#6175d6', relief='flat', command=play).pack(side=tk.LEFT, padx=40)
tk.Button(frame_1, text='下一首', font=('黑体', 15), fg='#f6f5f3', bg='#6175d6', relief='flat', command=next_song).pack(side=tk.LEFT)

frame_2 = tk.Frame(bg='#6175d6')  # 创建第二个框架
frame_2.pack(pady=10)  # 在窗口中放置框架

# 创建音量控制和暂停/继续按钮
tk.Button(frame_2, text='音量↑', font=('黑体', 15), fg='#f6f5f3', bg='#6175d6', relief='flat', command=soundsize_up).pack(side=tk.LEFT)
tk.Button(frame_2, text='暂停', font=('黑体', 15), fg='#f6f5f3', bg='#6175d6', relief='flat', command=stop).pack(side=tk.LEFT, padx=20)
tk.Button(frame_2, text='继续', font=('黑体', 15), fg='#f6f5f3', bg='#6175d6', relief='flat', command=cancel).pack(side=tk.LEFT, padx=20)
tk.Button(frame_2, text='音量↓', font=('黑体', 15), fg='#f6f5f3', bg='#6175d6', relief='flat', command=soundsize_down).pack(side=tk.LEFT)

# 用于显示当前歌曲信息的变量
song_name_var = tk.StringVar()  # 创建歌曲名的StringVar
singer_var = tk.StringVar()  # 创建歌手名的StringVar

# 创建标签显示当前歌曲名和歌手名
tk.Label(root, textvariable=song_name_var, font=('黑体', 15), bg='#6175d6').pack(pady=10)
tk.Label(root, textvariable=singer_var, font=('黑体', 15), bg='#6175d6').pack(pady=10)

root.mainloop()  # 启动主事件循环

在这里插入图片描述

逻辑实现

读取音乐

完善方向是加上排序功能,music是音乐文件夹 os.listdir 打开指定文件夹获取文件夹下所有文件名称


def music_list():
    """返回'music'目录下所有.mp3文件的列表。"""
    return [i for i in os.listdir('music') if i.endswith('.mp3')]  # 获取所有.mp3文件

def name_now(num):  # 获取当前播放音乐的名称和歌手
    name1 = music_list()[num]  # 获取当前音乐文件名
    song_name = name1.split(' - ')[-1][:-4]  # 提取歌曲名(去掉文件扩展名)
    singer = name1.split(' - ')[0]  # 提取歌手名
    return name1, song_name, singer  # 返回文件名、歌曲名和歌手名

def play():
    """播放选中的音乐。"""
    mixer.init()  # 初始化mixer
    size = 0.5  # 设置初始音量
    name, song_name, singer = name_now(num)  # 获取当前播放音乐的信息
    mixer.music.set_volume(size)  # 设置音量
    mixer.music.load(f'music/{name}')  # 加载音乐文件
    mixer.music.play()  # 播放音乐
    song_name_var.set(song_name)  # 更新GUI中的歌曲名
    singer_var.set(singer)  # 更新GUI中的歌手名

按键功能

音乐暂停/取消暂停

def stop():
    """暂停音乐。"""
    mixer.music.pause()  # 暂停当前播放的音乐

def cancel():
    """继续播放音乐。"""
    mixer.music.unpause()  # 恢复播放被暂停的音乐

切换音乐上一首

def last():
    """播放上一首曲目。"""
    global num  # 声明num为全局变量
    mixer.music.stop()  # 停止当前播放的音乐
    num = (num + 1) % len(music_list())  # 更新播放曲目的索引(循环播放)
    play()  # 播放新曲目

切换音乐下一首

def next_song():
    """播放下一首曲目。"""
    global num  # 声明num为全局变量
    mixer.music.stop()  # 停止当前播放的音乐
    num = (num - 1) % len(music_list())  # 更新播放曲目的索引(循环播放)
    play()  # 播放新曲目

控制音乐音量增大

def soundsize_up():
    """增加音量。"""
    global size  # 声明size为全局变量
    size = min(size + 0.1, 1)  # 增加音量,确保不超过1
    mixer.music.set_volume(size)  # 更新音量

控制音乐音量降低

def soundsize_down():
    """减少音量。"""
    global size  # 声明size为全局变量
    size = max(size - 0.1, 0)  # 减少音量,确保不低于0
    mixer.music.set_volume(size)  # 更新音量

最后展示效果

在这里插入图片描述

总结

Tkinter是一个功能强大且简单易用的库,适合构建轻量级的GUI应用程序。

它在不同的操作系统上具有相同的外观和行为,因此可以实现跨平台的应用程序。

当然,Tkinter还有更多的功能和细节,通过阅读官方文档和教程,你可以更深入地了解和学习如何运用Tkinter来创建各种GUI应用程序。

👇 源码资料获取 · 技术与交流 👇

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值