python:tkinter + pygame = 简易音乐播放器

这是一个使用Python的Tkinter库和pygame.mixer模块创建的简易音乐播放器程序。用户可以选择音乐文件夹,进行播放、停止、暂停、重复播放和连续播放等操作。程序通过Tkinter界面展示,并支持MP3、MID和OGG格式的音频文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pip install pygame

tk_mp3.py 程序如下

# -*- coding: utf-8 -*-
""" 简易音乐播放器 """
import os
import time
import tkinter as tk
from tkinter import filedialog
import pygame

root = tk.Tk()
root.title("简易音乐播放器")
var1 = tk.StringVar() # 动态字符串
label = tk.Label(root, textvariable=var1, font="SimSun 12", fg="purple")
listbox = tk.Listbox(root, font="SimSun 12", selectmode=tk.SINGLE)

#pygame.init()
pygame.mixer.init()

class Application(tk.Frame):
    """Simple mp3 player """
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()

    def create_buttonbar(self):
        self.button1 = tk.Button(self, text="先选音乐文件夹",command=self.opendir)
        self.button1.pack(side="left", padx=5, pady=2)

        self.button2 = tk.Button(self, text="播放", command=self.play)
        self.button2.pack(side="left", padx=5, pady=2)

        self.button3 = tk.Button(self, text="停止", command=self.stop)
        self.button3.pack(side="left", padx=5, pady=2)

        self.button4 = tk.Button(self, text="暂停", command=self.pause)
        self.button4.pack(side="left", padx=5, pady=2)

        self.button5 = tk.Button(self, text="取消暂停", command=self.unpause)
        self.button5.pack(side="left", padx=5, pady=2)

        self.button6 = tk.Button(self, text="重复播放", command=self.looplay)
        self.button6.pack(side="left", padx=5, pady=2)

        self.button7 = tk.Button(self, text="连续播放", command=self.mulplay)
        self.button7.pack(side="left", padx=5, pady=2)

        self.button8 = tk.Button(self, text="退出", fg="red", \
                                       command=self.master.destroy)
        self.button8.pack(side="left", padx=5, pady=2)

    def opendir(self):
        if pygame.mixer.music.get_busy():
            return 1
        dir1 = filedialog.askdirectory(initialdir='D:/Music')
        if dir1 == '':
            return 1
        var1.set(dir1)
        os.chdir(dir1)
        filels = os.listdir()
        if len(filels) > 0:
            listbox.delete(0, tk.END)
            for fname in filels:
                fn,ext = os.path.splitext(fname)
                if ext.lower() in ('.mp3','.mid','.ogg'):
                    listbox.insert(tk.END, fname)
        return 1

    def play(self):
        """播放"""
        if pygame.mixer.music.get_busy():
            return 1
        fname = listbox.get(tk.ACTIVE)
        var1.set(fname)
        if fname != '':
            pygame.mixer.music.load(fname)
            pygame.mixer.music.play()
        return 1

    def stop(self) -> None:
        """停止"""
        pygame.mixer.music.stop()

    def pause(self) -> None:
        """暂停"""
        pygame.mixer.music.pause()

    def unpause(self) -> None:
        """取消暂停"""
        pygame.mixer.music.unpause()

    def looplay(self):
        """重复播放"""
        if pygame.mixer.music.get_busy():
            return 1
        fname = listbox.get(tk.ACTIVE)
        var1.set(fname)
        if fname != '':
            pygame.mixer.music.load(fname)
            # loops=重复的次数, start=开始播放的位置
            pygame.mixer.music.play(loops=3, start=0.0)
        return 1

    def mulplay(self):
        """连续播放"""
        if pygame.mixer.music.get_busy():
            return 1
        n = listbox.index(tk.END)
        print(n)
        i = 0
        while i < n:
            if pygame.mixer.music.get_busy():
                time.sleep(1)
            else:
                fname = listbox.get(i)
                var1.set(fname)
                i += 1
                if fname != '':
                    pygame.mixer.music.load(fname)
                    pygame.mixer.music.play()
            time.sleep(1)
        return 1


# main()
label.pack(side="top")
app = Application(master=root)
app.create_buttonbar()
app.pack()
listbox.pack(side="bottom", fill='both', padx=5, pady=2)
app.mainloop()

程序员注意:不要用 root.geometry("640x480") 强行定义应用显示size,会影响.pack() 显示。

运行 python tk_mp3.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值