You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pygame MIDI模块无法刷新MIDI输入设备列表求助

解决Pygame MIDI设备刷新不生效的问题

我刚接触Pygame的时候也碰到过这个坑!问题出在Pygame MIDI模块的初始化机制上——第一次调用pygame.midi.init()后,它只会扫描一次系统上的MIDI设备,后续重复调用init()并不会重新扫描设备列表。你现在的create_devices方法每次都调用init(),但因为模块已经处于初始化状态,它直接返回之前缓存的设备数据,自然看不到新增/移除的设备。

解决方案

要解决这个问题,每次刷新设备前,我们需要先退出MIDI模块的初始化状态,再重新初始化,这样才能让Pygame重新扫描系统中的MIDI设备。修改你的create_devices方法如下:

def create_devices(self):
    # 先检查MIDI模块是否已初始化,若是则先退出
    if pygame.midi.get_init():
        pygame.midi.quit()
    # 重新初始化MIDI模块,触发设备重扫描
    pygame.midi.init()
    devices = []
    device_count = pygame.midi.get_count()
    for d in range(device_count):
        device = pygame.midi.get_device_info(d)
        device_name = device[1].decode()
        device_type = device[2]
        if device_type == 1:  # 筛选输入设备
            input_device = MidiDevice(d, device_name)
            devices.append(input_device)
    return devices

额外注意事项

修改后,每次点击刷新按钮调用create_devices时,都会重新扫描设备并返回最新列表。同时要确保:

  • 刷新按钮的点击事件确实将新列表赋值给了类属性
  • 赋值后触发了界面上选择按钮的重绘逻辑,这样新设备才能显示在屏幕上

内容的提问来源于stack exchange,提问作者Aarick-F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:52:46