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