使用python 2.7按钮播放mp3文件 - TKinter

时间:2014-10-25 16:08:15

标签: python-2.7 button audio tkinter

您好我正在尝试创建一个使用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()

由于

2 个答案:

答案 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)

你有两个错误:

  1. 经典command错误:当您传递这样的参数时:

    Button(..., command=winsound.PlaySound(...))
    

    正在调用 PlaySound并使用其返回值(默认为None),因此您正在通过command=None。使用lambda

    Button(..., command=lambda: winsound.PlaySound(...))
    
  2. winsound不会播放mp3,而是wav s。使用其他图书馆,可以找到建议here