未知 : —— - 朵朵青稞 - suishunyi.top

——

原创 2024-07-10 01:22:02 浏览量: 413 收藏: 0

```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()

```

朵朵青稞站主: 隋顺意 (一名可爱的中学生)

未知功能 · 提建议 · 未知功能