You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Tkinter列表框中ACTIVE对象的路径用于Pygame播放MP3

获取Tkinter Listbox ACTIVE项对应文件路径的实现方法

完全可以通过get方法或配套的索引机制拿到目标文件路径,具体实现分两种常见场景:

场景1:Listbox直接存储完整文件路径

如果你的Listbox列表项直接插入的是MP3文件的完整路径,直接调用listbox.get(ACTIVE)即可直接拿到可用的音频路径,示例代码如下:

from tkinter import *
import pygame.mixer

# 初始化基础组件
root = Tk()
playlist_box = Listbox(root, width=80)
playlist_box.pack(pady=10)

# 模拟用户选择文件后插入完整路径到Listbox
playlist_box.insert(END, "C:/Music/晴天.mp3")
playlist_box.insert(END, "C:/Music/七里香.mp3")

def play_audio():
    # 直接获取ACTIVE状态项的完整路径
    active_file = playlist_box.get(ACTIVE)
    pygame.mixer.init()
    pygame.mixer.music.load(active_file)
    pygame.mixer.music.play()

play_btn = Button(root, text="播放选中音频", command=play_audio)
play_btn.pack(pady=5)

root.mainloop()

场景2:Listbox仅展示文件名(隐藏长路径)

如果为了界面美观,Listbox只展示MP3文件名,你需要额外维护一个和Listbox项顺序一一对应的路径映射列表,通过ACTIVE项的索引取对应路径即可:

from tkinter import *
import pygame.mixer
import os

root = Tk()
playlist_box = Listbox(root, width=50)
playlist_box.pack(pady=10)

# 路径映射列表,和Listbox项顺序完全对应
file_path_list = []

def add_file_to_list(full_path):
    # Listbox仅插入文件名展示
    file_name = os.path.basename(full_path)
    playlist_box.insert(END, file_name)
    # 完整路径存入映射列表
    file_path_list.append(full_path)

# 模拟添加两个音频文件
add_file_to_list("C:/Music/晴天.mp3")
add_file_to_list("C:/Music/七里香.mp3")

def play_audio():
    # 获取ACTIVE项的索引值
    active_index = playlist_box.index(ACTIVE)
    # 从映射列表取出对应完整路径
    active_file = file_path_list[active_index]
    pygame.mixer.init()
    pygame.mixer.music.load(active_file)
    pygame.mixer.music.play()

play_btn = Button(root, text="播放选中音频", command=play_audio)
play_btn.pack(pady=5)

root.mainloop()

补充说明

如果你的Listbox支持多选,可使用listbox.curselection()方法获取所有选中项的索引,再遍历索引取值即可,单音频播放场景下使用ACTIVE属性完全满足需求。

内容的提问来源于stack exchange,提问作者MonoRca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:57:00