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

Python 2.7 使用python 2.7按钮播放mp3文件-TKinter,python-2.7,button,audio,tkinter,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

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

谢谢

您有两个错误:

  • 经典的
    命令
    错误:当您传递如下参数时:

    Button(..., command=winsound.PlaySound(...))
    
    您正在调用
    PlaySound
    并使用其返回值(默认为
    None
    ),因此您正在传递
    command=None
    。使用
    lambda

    Button(..., command=lambda: winsound.PlaySound(...))
    
  • winsound
    不是用来播放
    mp3
    s的,而是用来播放
    wav
    s的。使用其他库,可以找到建议


  • 您可以使用pyglet library播放mp3文件,但也应该安装了
    avbin
    library。()

    另一个问题是,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()
    

    所以问题是什么?我不能让它播放文件谢谢你帮了我很多忙