其实你很棒 2023-01-02 22:50 采纳率: 68.8%
浏览 137
已结题

PySide6 加载matplotlib

PySide6 加载matplotlib,我计划用PySide6中的graphicsView控件绘图,但图是用matplotlib绘制的,matplotlib绘制的图在graphicsView控件中显示。求一个完整的,可运行,有备注的代码。

  • 写回答

6条回答 默认 最新

  • |__WhoAmI__| 2023-01-02 23:06
    关注

    这是一个使用 PySide6 和 Matplotlib 绘制图形的例子。它使用 Matplotlib 的 FigureCanvas 类将图形绘制到 QWidget 中,然后使用 QGraphicsView 将图形显示出来。

    需要先安装 PySide6 和 Matplotlib:

    pip install pyside6 matplotlib
    
    import sys
    import random
    
    from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton
    from PySide6.QtCore import Qt
    from matplotlib.figure import Figure
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    
    class MatplotlibWidget(QWidget):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            # Create a Matplotlib figure and a FigureCanvas to display it
            self.figure = Figure()
            self.canvas = FigureCanvas(self.figure)
    
            # Create a QGraphicsView to display the FigureCanvas
            self.view = QGraphicsView(self)
            self.view.setRenderHint(QGraphicsView.Antialiasing)
            self.view.setRenderHint(QGraphicsView.SmoothPixmapTransform)
            self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
            self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
            self.view.setResizeAnchor(QGraphicsView.AnchorViewCenter)
            self.view.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
            self.view.setOptimizationFlag(QGraphicsView.DontAdjustForAntialiasing, True)
            self.view.setOptimizationFlag(QGraphicsView.DontSavePainterState, True)
    
            # Create a QGraphicsScene to hold the FigureCanvas
            self.scene = QGraphicsScene(self)
            self.scene.addWidget(self.canvas)
            self.view.setScene(self.scene)
    
            # Lay out the widget
            layout = QVBoxLayout(self)
            layout.addWidget(self.view)
            self.setLayout(layout)
    
        def plot(self):
            # Generate some random data
            data = [random.random() for _ in range(10)]
    
            # Clear the figure and redraw the plot
            self.figure.clear()
            ax = self.figure.add_subplot(111)
            ax.plot(data, "r-")
            self.canvas.draw()
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
    
        window = QMainWindow()
    
        # Create a MatplotlibWidget and add it to the window
        plot_widget = MatplotlibWidget()
        window.setCentralWidget(plot_widget)
    
        # Create a button to redraw the plot
        button = QPushButton("Redraw")
        button.clicked.connect(plot_widget.plot)
        window.addToolBar(button)
    
        window.show()
    
        app.exec_()
    

    仅供参考,望采纳,谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月5日
  • 已采纳回答 1月5日
  • 创建了问题 1月2日

悬赏问题

  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥15 pyqt信号槽连接写法
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。