——
```python import tkinter as tk from tkinter import filedialog, ttk from pygame import mixer import threading
class MusicPlayer: def init(self, master): self.master = master master.title("音乐播放器")
# 初始化pygame mixer
mixer.init()
# 创建主框架
self.main_frame = tk.Frame(master)
self.main_frame.pack(padding=10)
# 文件路径变量
self.file_path = ""
# 创建按钮和标签
self.create_widgets()
# 创建进度条
self.create_progressbar()
# 创建音量控制
self.create_volume_control()
# 初始化播放状态
self.is_paused = False
def create_widgets(self):
# 打开文件按钮
self.open_button = tk.Button(self.main_frame, text="打开文件", command=self.open_file)
self.open_button.grid(row=0, column=0, pady=5)
# 播放按钮
self.play_button = tk.Button(self.main_frame, text="播放", command=self.play_music)
self.play_button.grid(row=1, column=0, pady=5)
# 暂停按钮
self.pause_button = tk.Button(self.main_frame, text="暂停", command=self.pause_music)
self.pause_button.grid(row=1, column=1, pady=5)
# 停止按钮
self.stop_button = tk.Button(self.main_frame, text="停止", command=self.stop_music)
self.stop_button.grid(row=1, column=2, pady=5)
# 倍速播放选项
self.speed_label = tk.Label(self.main_frame, text="播放速度:")
self.speed_label.grid(row=2, column=0, pady=5)
self.speed_var = tk.DoubleVar(value=1.0)
self.speed_options = [0.5, 1.0, 1.5, 2.0]
self.speed_dropdown = ttk.Combobox(self.main_frame, textvariable=self.speed_var, values=self.speed_options)
self.speed_dropdown.current(1) # 默认速度为1.0
self.speed_dropdown.bind("<<ComboboxSelected>>", self.change_speed)
self.speed_dropdown.grid(row=2, column=1, pady=5)
def create_progressbar(self):
# 进度条
self.progress_bar = ttk.Progressbar(self.main_frame, orient="horizontal", mode="determinate", length=300)
self.progress_bar.grid(row=3, column=0, columnspan=3, pady=5)
def create_volume_control(self):
# 音量控制
self.volume_label = tk.Label(self.main_frame, text="音量:")
self.volume_label.grid(row=4, column=0, pady=5)
self.volume_scale = tk.Scale(self.main_frame, from_=0, to=1, resolution=0.01, orient="horizontal", command=self.set_volume)
self.volume_scale.set(1) # 默认音量为最大
self.volume_scale.grid(row=4, column=1, pady=5)
def open_file(self):
self.file_path = filedialog.askopenfilename(
initialdir="/",
title="选择音频文件",
filetypes=(
("MP3 文件", "*.mp3"),
("OGG 文件", "*.ogg"),
("WAV 文件", "*.wav"),
("WMA 文件", "*.wma"),
("所有文件", "*.*"),
),
)
if self.file_path:
mixer.music.load(self.file_path)
def play_music(self):
if self.file_path:
if mixer.music.get_busy() == 0: # 如果音乐没有在播放
mixer.music.play()
else:
mixer.music.unpause()
self.is_paused = False
self.update_progressbar()
def pause_music(self):
if mixer.music.get_busy():
mixer.music.pause()
self.is_paused = True
def stop_music(self):
mixer.music.stop()
self.progress_bar["value"] = 0
def change_speed(self, event):
selected_speed = self.speed_var.get()
mixer.music.set_pos(mixer.music.get_pos() / mixer.music.get_speed()) # 调整播放位置以保持流畅
mixer.music.set_speed(selected_speed)
def set_volume(self, val):
volume = float(val)
mixer.music.set_volume(volume)
def update_progressbar(self):
if mixer.music.get_busy() and not self.is_paused:
current_pos = int(mixer.music.get_pos() / 1000) # 获取当前播放位置(毫秒)
self.progress_bar["value"] = current_pos
self.master.after(1000, self.update_progressbar) # 每秒更新一次进度条
if name == "main": root = tk.Tk() app = MusicPlayer(root) root.mainloop()
```

还没有人发言,快来抢沙发!