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