[英]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.