如何获取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
相关产品推荐
相关产品推荐

