我试图让列表框播放列表中的歌曲在我选择它们时变为活动状态,但出现错误 “文件“c:/Users/User/Documents/Python-testes/teste-2.py”,第 21 行,正在播放 文件名 = Playlist_box(ACTIVE) 类型错误:“列表框”对象不可调用”
这是我的代码:
from tkinter import Listbox, Tk
from tkinter import Label
from tkinter import Button
from tkinter import filedialog
from tkinter.constants import ACTIVE, END
from pygame import mixer
import pygame
def play_song():
filenames = list(filedialog.askopenfilenames(initialdir = "C:/Python/Playlist/", title =
"Please select a file", filetypes=(("Mp3 Files", "*.mp3"),)))
for song in filenames:
song = song.split("/")
song = song[-1]
Playlist_box.insert(END,song)
def play():
filenames = Playlist_box(ACTIVE)
filenames = f'C:/Python/Playlist/{filenames}.mp3'
mixer.music.load(filenames)
mixer.music.play(loops=0)
root = Tk()
root.title('test')
label = Label(root,
text="choose the song").pack()
Playlist_box = Listbox(root, bg="black", fg="green", width=60)
Playlist_box.pack()
Button(root, text="choose your songs", command=play_song).pack()
Button(root, text="Play music", padx=12, bg="black", fg="white", command= play).pack()
root.mainloop()
有人可以告诉我有什么问题吗?它不是“活动”或“文件名”?
答案 0 :(得分:1)
这一行
def play():
filenames = Playlist_box(ACTIVE)
应该是 -
def play():
filenames = Playlist_box.get(ACTIVE)
答案 1 :(得分:1)
实际答案是:
Playlist_box.get(ACTIVE)
根据this post:
一个项目在您点击后变为活动状态——这意味着在您的 ListboxSelect 方法返回之后。因此,您将打印出此次点击之前处于活动状态的所有内容(通常是指您上次点击的内容)。
Playlist_box.get(ACTIVE)
因此这将播放之前选择的歌曲。
所以你真正需要的是:
Playlist_box.get(Playlist_box.curselection())