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

使用PySide6 snake_case特性结合Matplotlib绘图仅显示黑色画布的问题

问题分析与解决方法

这不是Bug,是Matplotlib的Qt后端暂未适配PySide6的snake_case特性导致的。

当你全局导入from __feature__ import snake_case后,PySide6会自动将所有Qt类的驼峰式方法转换成蛇形命名,但Matplotlib 3.8.2版本的backend_qt5agg内部仍在使用Qt的驼峰式方法调用。此时Matplotlib调用Qt方法时找不到对应的蛇形版本,导致画布无法正常渲染,最终显示黑色。

可行的解决方法

调整导入顺序

把Matplotlib相关模块的导入放在snake_case特性启用之前,这样Matplotlib加载Qt后端时使用的是原始驼峰式方法,后续自定义代码使用蛇形命名不受影响:

from PySide6.QtWidgets import QMainWindow, QApplication
# 先导入Matplotlib模块,此时未启用snake_case
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
# 再启用snake_case,仅影响后续自定义代码
from __feature__ import snake_case


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        figure = Figure()
        ax = figure.add_subplot(111)
        ax.plot([1, 2, 3], [2, 3, 1])
        canvas = FigureCanvasQTAgg(figure)
        self.set_central_widget(canvas)
        self.show()


app = QApplication()
w = MainWindow()
app.exec()

局部使用snake_case(可选)

如果你不想全局启用snake_case,可以仅在需要的类内部使用,避免干扰Matplotlib的代码:

from PySide6.QtWidgets import QMainWindow, QApplication
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg


class MainWindow(QMainWindow):
    from __feature__ import snake_case
    
    def __init__(self):
        super().__init__()
        figure = Figure()
        ax = figure.add_subplot(111)
        ax.plot([1, 2, 3], [2, 3, 1])
        canvas = FigureCanvasQTAgg(figure)
        self.set_central_widget(canvas)
        self.show()


app = QApplication()
w = MainWindow()
app.exec()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:32:44