您好我正在尝试创建一个使用TKinter播放mp3文件的按钮到目前为止我有以下代码。我不能让它播放mp3文件
from Tkinter import *
import os
import winsound
app = Frame(root)
app.pack(side='bottom')
button1 = Button(app, text="Enter Program", command=winsound.PlaySound('music.mp3',winsound.SND_FILENAME))
button1.pack()
由于
答案 0 :(得分:3)
你可以使用pyglet库播放mp3文件,但你也应该安装avbin
库。 (https://code.google.com/p/avbin/)
另一个问题是,tkinter有自己的主循环,pyglet有自己的主循环。所以你应该使用线程。这段代码可能会给你一个想法:
from Tkinter import *
from threading import Thread
import pyglet
root = Tk()
app = Frame(root)
app.pack(side='bottom')
player = pyglet.media.Player()
music_file = pyglet.media.load('foo.mp3')
def startPlaying():
player.queue(music_file)
player.play()
pyglet.app.run()
def playSound():
global sound_thread
sound_thread = Thread(target=startPlaying)
sound_thread.start()
button1 = Button(app, text="Enter Program", command=playSound)
button1.pack()
root.mainloop()
pyglet.app.exit()
答案 1 :(得分:0)
你有两个错误:
经典command
错误:当您传递这样的参数时:
Button(..., command=winsound.PlaySound(...))
您正在调用 PlaySound
并使用其返回值(默认为None
),因此您正在通过command=None
。使用lambda
:
Button(..., command=lambda: winsound.PlaySound(...))
winsound
不会播放mp3
,而是wav
s。使用其他图书馆,可以找到建议here。