gpt4 book ai didi

python-3.x - 使用 pygame.mixer.music.get_endevent()

转载 作者:行者123 更新时间:2023-12-03 08:51:36 44 4
gpt4 key购买 nike

我希望 tkinter 标签在音效完成时不显示任何内容。

我一直在研究如何创建/初始化/捕捉音乐事件的结束,但没有运气。

def play_btn():

if mixer.music.get_busy():

mixer.music.fadeout(1000)

snd_fyl.set(snd_list.get(ACTIVE))
mixer.music.load(snd_dir+"/"+snd_list.get(ACTIVE)+"mp3")
mixer.music.play()

def stop_btn():

mixer.music.stop()

clear_label()

def clear_label():

snd_fyl.set("")

snd_lbl1 = LabelFrame(MainWindow, text="Sound effect playing", labelanchor=N)


snd_playing_lbl = Label(snd_lbl1, width=40, textvariable=snd_fyl)

显然,play_btn函数从列表中播放声音效果。

stop_btn 函数提前停止音效并清除标签。

已创建 clear_label 函数,为 end_of_song 事件做好准备

最佳答案

您必须使用set_endevent()来设置当音乐结束时它将发送到事件队列的值。

MUSIC_END = pygame.USEREVENT+1
pygame.mixer.music.set_endevent(MUSIC_END)

然后你可以在事件循环中测试它

if event.type == MUSIC_END:
print('music end event')

当音乐结束时,它会打印文本 - 但当你停止或暂停它时,它不会打印文本。

顺便说一句:在 Linux 上,我在音乐播放结束前几毫秒看到了这段文字。


完整的工作示例 - 但没有 tkinter

import pygame

pygame.init()

screen = pygame.display.set_mode((400, 300))

MUSIC_END = pygame.USEREVENT+1
pygame.mixer.music.set_endevent(MUSIC_END)

pygame.mixer.music.load('sound.wav')
pygame.mixer.music.play()

running = True
while running:

for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

if event.type == MUSIC_END:
print('music end event')

if event.type == pygame.MOUSEBUTTONDOWN:
# play again
pygame.mixer.music.play()

pygame.quit()

编辑:使用tkinter的示例

import pygame
import tkinter as tk

def check_event():
for event in pygame.event.get():
if event.type == MUSIC_END:
print('music end event')
label['text'] = ''

root.after(100, check_event)

def play():
label['text'] = 'playing'
pygame.mixer.music.play()

# --- main ---

pygame.init()

MUSIC_END = pygame.USEREVENT+1
pygame.mixer.music.set_endevent(MUSIC_END)
pygame.mixer.music.load('sound.wav')

root = tk.Tk()

label = tk.Label(root)
label.pack()

button = tk.Button(root, text='Play', command=play)
button.pack()

check_event()
root.mainloop()

pygame.quit()

关于python-3.x - 使用 pygame.mixer.music.get_endevent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58630700/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com