Pyglet,播放器,下一首歌
我正在尝试通过 pyglet 在 Python 3 中播放歌曲。我可以播放和停止一首歌,但当我想播放下一首歌时就会出现错误。我按照这些说明进行了操作。 我会在 tkinter 中做这个程序。
我的代码:
import pyglet
import glob
from tkinter import Tk, Button
songs=glob.glob("*.mp3")
player=pyglet.media.Player()
def play_song():
global player
for i in range(len(songs)):
source=pyglet.resource.media(songs[i])
player.queue(source)
player.play()
def pause_song():
player.pause()
def next_song():
player.next()
window=Tk()
play_=Button(text="play", command=play_song)
play_.pack()
pause_=Button(text="pause", command=pause_song)
pause_.pack()
next_=Button(text="next", command=next_song)
next_.pack()
window.mainloop()
错误信息:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1442, in __call__
return self.func(*args)
File "C:\Documents and Settings\Fany\Dokumenty\Hudba\Sabaton\2012 - Carolus Rex\py.py", line 15, in next_song
player.next()
AttributeError: 'Player' object has no attribute 'next'
2 个回答
0
你可以使用 os 模块,或者看看如何播放下一首歌。我觉得这对很多人会有帮助,不管你是用 os 模块还是其他方法。要播放下一首歌,可以使用全局变量,这一点很重要。
from tkinter import *
import os
root = Tk()
root.geometry("500x500")
root.title("music player ")
Label(root, text="MUSIC PLAYER").pack()
i=0
def prev():
pass
def paly():
music_dir = 'D:\songs'
songs = os.listdir(music_dir)
print(songs)
os.startfile(os.path.join(music_dir, songs[0]))
def nxt():
global i
music_dir = 'D:\songs'
songs = os.listdir(music_dir)
print(songs)
os.startfile(os.path.join(music_dir, songs[i]))
i=i+1
f1=Frame(root).pack()
Button(f1,text="prev",command=prev).pack(side=LEFT,padx=30)
Button(f1,text="play/pause",command=paly).pack(side=LEFT,padx=30)
Button(f1,text="next",command=nxt).pack(side=LEFT,padx=30)
root.mainloop()
0
试着对你的 next_song() 函数做以下修改
def next_song():
player.next_source()
你会发现 next() 这个方法已经被标记为“过时”,建议使用 next_source() 来代替
希望这对你有帮助
附言 当我在我的电脑上测试你的代码时,它是可以正常工作的。