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

