如何使用tkinter和pygame使Python中的单个按钮播放音乐、暂停音乐和取消暂停音乐?
我只能在按下按钮时让程序播放音乐。我试图暂停或停止音乐的一切都以失败告终。我觉得我应该使用if语句来暂停当前正在播放的音乐,或者在没有播放的情况下取消暂停,但我需要了解正确的编写方法。这是正确的方法吗?我真的很想能够从一个按钮开始,暂停和取消暂停音乐,但我正在努力找出如何进行编码。这是我播放音乐的代码如何使用tkinter和pygame使Python中的单个按钮播放音乐、暂停音乐和取消暂停音乐?,python,tkinter,audio,pygame,Python,Tkinter,Audio,Pygame,我只能在按下按钮时让程序播放音乐。我试图暂停或停止音乐的一切都以失败告终。我觉得我应该使用if语句来暂停当前正在播放的音乐,或者在没有播放的情况下取消暂停,但我需要了解正确的编写方法。这是正确的方法吗?我真的很想能够从一个按钮开始,暂停和取消暂停音乐,但我正在努力找出如何进行编码。这是我播放音乐的代码 def Play_music(): pygame.mixer.music.load('tavernsound.mp3') pygame.mixer.music.play()
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)
这里有一个例子
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
函数,该函数的语法为lambda参数:expression
。每次单击按钮时,任务
值都会更改。我使用您的代码创建了这个示例。它根据@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()
将复选按钮文本与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()
也许你可以切换状态?就像如果播放是一个布尔值,
playing=不播放
,它可以完美地工作,这正是我想要做的。谢谢你教我新东西。我尝试的if语句无效,因为我没有为音乐播放状态创建变量。为什么我需要这行:mxstate=3-mxstate?我知道它在做什么,但我真的不明白它是如何工作的。@Slackermxstate=3-mxstate#swap pause state
并不是最清楚的处理方法。相反,如果mxstate==1,则删除该行并在末尾添加mxstate=2,设置为暂停状态
,并且在的末尾也删除该行:#音乐暂停
块添加mxstate=1#设置为播放状态
。这就是mxstate=3-mxstate
所做的,通过从3中减去mxstate(1或2),在mxstate的1和2之间来回交换。Mike67可能想澄清答案的这一部分。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票