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

PySide6整合Matplotlib与Librosa报错:int()参数类型错误

PySide6 + Librosa 波形图显示问题解决

问题场景

开发基于PySide6的GUI程序,使用Librosa展示WAV/MP3波形图,核心代码如下:

# 导入库
import librosa
import librosa.display

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

# WavformShow.py中的代码
fig = Figure(figsize=(5, 2))
librosa.display.waveshow(data,sample_rate,offset=0.0)

报错信息

运行时触发如下错误:

Traceback (most recent call last):
  File "MainFrame_v8.py", line 8, in <module>
    from ClassicAudio.WavformShow import *
  File "E:\Code\Qt-proj\Pyside6UI\ClassicAudio\WavformShow.py", line 11, in <module>
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
  File "C:\Users\rui\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 7, in <module>
    from .backend_qtagg import (    # noqa: F401, E402 # pylint: disable=W0611
  File "C:\Users\rui\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\backends\backend_qtagg.py", line 12, in <module>
    from .backend_qt import (
  File "C:\Users\rui\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\backends\backend_qt.py", line 73, in <module>
    _MODIFIER_KEYS = [
  File "C:\Users\rui\AppData\Local\Programs\Python\Python38\lib\site-packages\matplotlib\backends\backend_qt.py", line 74, in <listcomp>
    (_to_int(getattr(_enum("QtCore.Qt.KeyboardModifier"), mod)),
TypeError: int() argument must be a string, a bytes-like object or a number, not 'KeyboardModifier'

已尝试的操作

  • 导入matplotlib.pyplot as plt,问题未解决;
  • 使用matplotlib.use('tkagg')切换后端,会弹出独立窗口,无法在GUI容器内显示波形图。

解决方案

1. 升级Matplotlib到兼容版本

该错误源于旧版Matplotlib对PySide6的枚举类型处理不兼容,Python3.8环境下建议升级Matplotlib到>=3.4.0版本:

pip install --upgrade matplotlib

2. 修正后端导入方式

如果暂时无法升级,可在导入Matplotlib模块前明确指定适配PySide6的后端:

import matplotlib
matplotlib.use('QtAgg')  # 指定适配PySide6的Qt后端
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

注意:改用backend_qtagg而非backend_qt5agg,因为QtAgg后端会自动适配PySide6/PyQt6。

3. 完善波形图绘制逻辑

原代码未将Librosa波形绑定到创建的Figure对象上,需补充子图创建和指定:

fig = Figure(figsize=(5, 2))
ax = fig.add_subplot(111)  # 创建子图容器
librosa.display.waveshow(data, sr=sample_rate, offset=0.0, ax=ax)  # 将波形绘制到指定子图
canvas = FigureCanvas(fig)  # 生成可嵌入PySide6的画布
# 之后将canvas添加到PySide6的UI容器中,例如:
# some_layout.addWidget(canvas)

内容的提问来源于stack exchange,提问作者Rui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:05:15