错误:“'Listbox' 对象不可调用””使用 ACTIVE

时间:2021-06-27 06:23:20

标签: python tkinter

我试图让列表框播放列表中的歌曲在我选择它们时变为活动状态,但出现错误 “文件“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()

有人可以告诉我有什么问题吗?它不是“活动”或“文件名”?

2 个答案:

答案 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())
相关问题