繁体   English   中英

如何使用 tkinter 和 pygame 在 Python 中制作单个按钮播放音乐、暂停音乐和取消暂停音乐?

[英]How can I make a single Button play music, pause music and unpause music in Python using tkinter and pygame?

我只能在按下按钮时让程序播放音乐。 我试图暂停或停止音乐的一切都以失败告终。 我觉得我应该使用 if 语句来暂停音乐,如果它当前正在播放,或者如果它不是,则取消暂停,但我需要了解编写它的正确方法。 这会是正确的方法吗? 我真的希望能够从一个按钮开始、暂停和取消暂停音乐,但我正在努力弄清楚如何 go 进行编码。 这是我播放音乐的代码。

 def Play_music():
     pygame.mixer.music.load('tavernsound.mp3')
     pygame.mixer.music.play()

这是按钮的代码:

btn11=Button(labelframe, text='Ambiance', width=14, bg='red', fg='black', command=Play_music)
btn11.pack(side=LEFT)

使用带有 if 条件的检查按钮文本

例子:

from tkinter import Tk, Button
from pygame import mixer

root = Tk()
root.title("Play Music")
root.geometry('350x200')

mixer.init()
mixer.music.load("sound.mp3")

def play_music():
    if button["text"] == "Play":
        button["text"] = "Pause"
        button["bg"] = "red"
        mixer.music.play()
    else:
        button["text"] = "Play"
        button["bg"] = "green"
        mixer.music.pause()

button = Button(root, text='Play', width=14, bg='green', fg='black', command=play_music)
button.pack()

root.mainloop()

这是一个例子。

from tkinter import *

root = Tk()

def doSomething(task):
    global var, button
    if task == 0:
        var.set("Started Playing")
        button.configure(text = "Pause")
        button.configure(command = lambda task = 1: doSomething(task))
        #play
    elif task == 1:
        var.set("Paused")
        button.configure(text = "Resume")
        button.configure(command = lambda task = 0: doSomething(task))
        #pause

button = Button(root, text = "Play", command = lambda task = 0: doSomething(task))
button.pack()
var = StringVar()
label = Label(root, textvariable = var)
label.pack()

root.mainloop()

在这里,相同的按钮用于播放、暂停和恢复。 我使用了lambda function 语法lambda arguments: expression 每次单击按钮时, task值都会更改。

我用你的代码来创建这个例子。 它根据@AST 答案更改按钮文本:

from tkinter import *
import pygame

root = Tk()
root.title("MSC")

pygame.init()

mxstate = 0 # music play state

pygame.mixer.music.load('tavernsound.mp3')

def Play_music():
     global mxstate
     if mxstate == 0:  # music not started
         pygame.mixer.music.play()
         btn11.configure(text = "Pause")
         mxstate =  1
         return
        
     if mxstate == 1:  # music playing
         pygame.mixer.music.pause()
         btn11.configure(text = "Resume")
     else:  # music paused
         pygame.mixer.music.unpause()
         btn11.configure(text = "Pause")
     mxstate = 3-mxstate  # swap pause state
     
btn11=Button(root, text='Ambiance', width=14, bg='red', fg='black', command=Play_music)
btn11.pack(side=LEFT)

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM