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
相关产品推荐
相关产品推荐

