簡體   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