使用 matplotlib 和 PySide6 与 Snake_case 在黑色画布中显示图形结果

问题描述 投票:0回答:1

我目前正在尝试使用 PySide6 (6.6.1) 和 matplotlib (3.8.2) 绘制图表。但是,只有当我不使用 PySide6 的 Snake_case 功能时,这才可以按预期工作。如果我使用snake_case,则仅显示黑色画布。

from PySide6.QtWidgets import QMainWindow, QApplication
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
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()

这是一个错误还是有办法解决这个问题?

python qt matplotlib pyside pyside6
1个回答
0
投票

解决方法

我们可以添加重新实现的 qt 方法的蛇形版本。在Figure类中并让他们调用camelCase版本

import re

_RE_CAMELCASE_SNAKE_CASE = re.compile(r'(?<!^)(?=[A-Z])')

# qt methods reimpl. in Figure
_QT6_METHODS = [
    'enterEvent',
    'keyPressEvent',
    'keyReleaseEvent',
    'leaveEvent',
    'mouseDoubleClickEvent',
    'mouseMoveEvent',
    'mousePressEvent',
    'mouseReleaseEvent',
    'paintEvent',
    'resizeEvent',
    'showEvent',
    'wheelEvent',

    'sizeHint',
    'minimumSizeHint'
]

def _camel_to_snake(camel_case: str) -> str:
    """convert camelCase to snake_case"""
    return _RE_CAMELCASE_SNAKE_CASE.sub('_', camel_case).lower()

def add_snake_case_methods(cls):
    
    for method in _QT6_METHODS:
        setattr(cls, _camel_to_snake(method), getattr(cls, method))

    return cls

然后我们就可以像这样使用它了

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg

from __feature__ import snake_case

FigureCanvasQTAgg = add_snake_case_methods(FigureCanvasQTAgg)
© www.soinside.com 2019 - 2024. All rights reserved.