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

Pytest运行时导入matplotlib.backends.backend_qt5agg报错求助

解决pytest中导入matplotlib.backends.backend_qt5agg时的TypeError问题

在运行pytest测试时,导入matplotlib.backends.backend_qt5agg出现TypeError: int() argument must be a string, a bytes-like object or a number, not 'KeyboardModifier',但正常运行应用时无此问题,使用版本为matplotlib 3.6.0 + PyQt5。以下是可行的解决方案:

方案1:延迟导入matplotlib模块

将matplotlib的导入逻辑移到测试函数内部,确保Qt环境初始化完成后再加载模块:

from PyQt5 import QtCore, QtGui, QtTest, QtWidgets
from PyQt5.QtCore import QCoreApplication, QObject, Qt
from PyQt5.QtWidgets import *
from pytestqt.plugin import QtBot

def test_method(qtbot):
    # 延迟导入,避免模块初始化时的Qt环境问题
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    # 后续测试代码
    ...

方案2:提前初始化Qt应用并指定matplotlib后端

在测试文件开头添加代码,确保Qt应用实例存在,并明确指定matplotlib的后端:

import matplotlib
# 强制指定Qt5Agg后端
matplotlib.use('Qt5Agg')

from PyQt5 import QtCore, QtGui, QtTest, QtWidgets
from PyQt5.QtCore import QCoreApplication, QObject, Qt
from PyQt5.QtWidgets import *
from pytestqt.plugin import QtBot
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

# 确保Qt应用已初始化
app = QCoreApplication.instance()
if app is None:
    app = QtWidgets.QApplication([])

def test_method(qtbot):
    # 测试代码
    ...

方案3:调整matplotlib版本

该问题是matplotlib 3.6.x版本与PyQt5在pytest环境下的已知兼容性bug,可通过版本调整解决:

  • 升级到matplotlib 3.7.0及以上版本,官方已修复此Qt后端初始化问题
  • 或降级到matplotlib 3.5.x版本,避开bug区间

执行升级命令:

pip install --upgrade matplotlib>=3.7.0

执行降级命令:

pip install matplotlib==3.5.3

方案4:临时修改matplotlib源码

若无法调整版本,可手动修改matplotlib安装目录下的backend_qt.py文件:
找到报错的_MODIFIER_KEYS定义段(对应文件第72-73行),替换为以下代码:

_MODIFIER_KEYS = [
    (int(QtCore.Qt.KeyboardModifier.ShiftModifier), "shift"),
    (int(QtCore.Qt.KeyboardModifier.ControlModifier), "control"),
    (int(QtCore.Qt.KeyboardModifier.AltModifier), "alt"),
    (int(QtCore.Qt.KeyboardModifier.MetaModifier), "meta"),
    (int(QtCore.Qt.KeyboardModifier.KeypadModifier), "keypad"),
]

直接调用Qt枚举值的int转换,绕开原代码中_enum函数导致的类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:15:33