使用 pygame.mixer.music.get_endevent()

2023-12-13

我想要一个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 函数从列表中播放声音效果。

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

The clear_label函数已准备好创建end_of_song event


你必须使用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()

EDIT:示例为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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pygame.mixer.music.get_endevent() 的相关文章

随机推荐

  • perl fork() exec() ,子进程疯狂

    我在用Linux and sh is in tcsh 我做了一个非常基本的fork and exec 但我需要帮助来实施安全措施 基本上我的 perl 脚本调用 sh子进程中的脚本 但当我这样做时Ctrl c为了杀死父进程 子进程会忽略该信
  • Excel 中的链接表和切片器

    我无法在 Excel 中创建一个切片器 该切片器不仅按主表进行过滤 还按辅助表进行过滤 该辅助表应与第一个表 具有作为引用的字段键 链接 换句话说 主表是students表 有一个唯一的ID作为引用 第二个表是每个学生参加的课程 我希望切片
  • CentOS 7 上 Ambari 2.7.5 安装失败

    我正在 CentOS 7 计算机上安装 Apache Ambari 2 7 5 我正在关注Apache 网站上的安装指南 指南第 1 步的最后一个命令 mvn B 全新安装 rpm rpm DnewVersion 2 7 5 0 0 Dbu
  • 将结果右对齐

    我再次问同样的问题 现在提供更多详细信息 希望能得到有效的解决方案 在下面的代码中 输出将打印对齐到行的右侧 table border 1 style width 100 tr td align right div test div td
  • PHP - 根据另一个数组的元素对数组元素进行排序:)

    所以我有两个数组 其中之一看起来像这样 它的值或元素的数量可以改变 array 4dec def3 a3d6 d12f 和另一个 array array id gt d12f name gt John array id gt a5f1 na
  • 在文件夹/目录中搜索特定文件扩展名 (PHP)

    我正在尝试用 PHP 设计一个程序 该程序允许我在由多个文件夹组成的已知目录中查找具有特定文件扩展名 例如 jpg shp 等 的文件 示例代码 文档或有关我需要使用哪些方法的信息将非常感激 glob很简单 对于递归下降有一些建议readd
  • 如何在服务器和 GWT 客户端之间使用 RSA?

    我想加密 Java 服务器后端和 GWT 客户端之间的数据 在 GWT 客户端上我使用sbn js图书馆 它的工作速度非常快 而且比gwt 加密 以下是我如何在给定 RSA e n 的客户端进行加密 我创建了一个JSFiddle var n
  • 简单的 C++ 交换函数

    为什么如果我有这样的函数 要交换两个数字 它不起作用 swap 我知道我可以通过在原型中声明指针来做到这一点 然后将各个变量的地址传递给main 但适用于数组 无需传递指针和地址 不起作用 void num exchange int m i
  • 在 log(n) 时间内获取排序数组中落在特定范围内的元素数量

    假设我有一个以下类的数组 按 y 升序排序 public class Obj public int x public int y 如何找到数组中 y 值在 log N 时间内给定的最小和最大范围内的 Obj 项的数量 我考虑过使用二分搜索来
  • 将 pyspark 字符串转换为日期格式

    我有一个日期 pyspark 数据框 其字符串列的格式为MM dd yyyy我正在尝试将其转换为日期列 I tried df select to date df STRING COLUMN alias new date show 我得到一串
  • 如何为 Tomcat servlet 配置 user.dir?

    在我的 Tomcat servlet 中 我使用一个 jar 库来查找某些 properties文件在System getProperty user dir 问题是 当我在不同的服务器上部署 servlet 时 user dir 是不同的
  • 为什么 gnu 链接器的“--oformat binary”选项将“.data”段放置在 0x0200000

    我一直在为 i386 实模式编写一些 独立 代码 并在 PXE 网络引导我的代码时遇到一些奇怪的错误 PXE E79 NBP is too big to fit in free base memory PXE M0F Exiting Int
  • 如何理解这个 dmesg 错误信息?

    我编写了这个简单的模块来处理设备并调用其一些电源管理方法 例如 suspend and resume 在初始化时 模块简单地查找特定设备并尝试调用其方法 include
  • 如何实现条件字符串格式化? [复制]

    这个问题在这里已经有答案了 我一直在用 Python 开发一个基于文本的游戏 我遇到过一个实例 我想根据一组条件以不同的方式格式化字符串 具体来说 我想显示描述房间中物品的文本 当且仅当相关项目对象位于房间对象的项目列表中时 我希望在房间的
  • 流星 $pull 从数组中删除

    我的数据库中有以下对象 id fTgR2YtHiZBzzqF6J following user id S4dLHRJiuHoyAp26q fb id 100006681067911 name Helen Amffhajfgiaa Laube
  • 我需要使用 FileStream.Flush() 或 FileStream.Flush(true) 吗?

    在我的程序中 我编写一个文件 然后调用读取该文件的外部程序 我需要Flush true 确保数据完全写入磁盘 或者Flush 充足的 class ExampleClass IDisposable private FileStream str
  • 检查启动条件

    我想测试 ASP Net Core 2 0 应用程序启动时的某些条件 例如 如果我的数据库服务器或其他服务器运行正常 这对于仅在请求后才会实例化的事物 例如我的存储库 特别有用 目前我必须手动执行此请求 但我希望我的应用程序尽早失败 建议在
  • GotW #101“解决方案”真的能解决任何问题吗?

    首先阅读 Herb 的 Sutters GotW 帖子 内容涉及 C 11 中的 pimpl GotW 100 编译防火墙 难度 6 10 GotW 101 编译防火墙 第 2 部分 难度 8 10 我在理解 GotW 101 中提出的解决
  • 有没有办法在 JavaScript 对象文字中使用变量键?

    我有这样的代码 var key anything var object key key attribute 我想知道是否有办法替代key与 任何东西 like var object anything key attribute 在 ES6
  • 使用 pygame.mixer.music.get_endevent()

    我想要一个tkinter声音效果完成后不显示任何内容的标签 我一直在研究如何创建 初始化 捕捉音乐事件的结束 但没有运气 def play btn if mixer music get busy mixer music fadeout 10