如何在 PyQt 中嵌入 Schemdraw

Posted

技术标签:

【中文标题】如何在 PyQt 中嵌入 Schemdraw【英文标题】:how to embed Schemdraw inside PyQt 【发布时间】:2020-10-09 13:43:48 【问题描述】:

Schemdraw 使用 matplotlib 通过 python 绘制和显示原理图。 例如,如果您运行以下代码,它会在 matplot 中绘制。

现在的问题是如何将这个 matplotlib 嵌入到 PyQt5 中?

谢谢

import schemdraw
import schemdraw.elements as elm

d = schemdraw.Drawing(fontsize=10)
d.add(elm.Capacitor())
r=d.add(elm.Resistor(theta=40))
d.add(elm.Diode(label="D1"))
d.draw()

【问题讨论】:

【参考方案1】:

使用 pypi 提供的版本,您不能嵌入 schemdraw(至少以简单的方式),但查看存储库我发现在下一个版本中,draw 方法被修改为接受轴,因此您必须从存储库安装 schemdraw :

python -m pip install git+https://bitbucket.org/cdelker/schemdraw.git

然后修改官方的matplotlib例子就可以嵌入schemdraw了:

import sys

from matplotlib.backends.qt_compat import QtCore, QtWidgets

if QtCore.qVersion() >= "5.":
    from matplotlib.backends.backend_qt5agg import (
        FigureCanvas,
        NavigationToolbar2QT as NavigationToolbar,
    )
else:
    from matplotlib.backends.backend_qt4agg import (
        FigureCanvas,
        NavigationToolbar2QT as NavigationToolbar,
    )
from matplotlib.figure import Figure

import schemdraw
import schemdraw.elements as elm


class ApplicationWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self._main = QtWidgets.QWidget()
        self.setCentralWidget(self._main)
        layout = QtWidgets.QVBoxLayout(self._main)

        canvas = FigureCanvas(Figure(figsize=(5, 3)))
        layout.addWidget(canvas)
        self.addToolBar(NavigationToolbar(canvas, self))
        ax = canvas.figure.subplots()

        d = schemdraw.Drawing(fontsize=10)
        d.add(elm.Capacitor())
        r = d.add(elm.Resistor(theta=40))
        d.add(elm.Diode(label="D1"))
        d.draw(ax=ax)


if __name__ == "__main__":
    # Check whether there is already a running QApplication (e.g., if running
    # from an IDE).
    qapp = QtWidgets.QApplication.instance()
    if not qapp:
        qapp = QtWidgets.QApplication(sys.argv)

    app = ApplicationWindow()
    app.show()
    app.activateWindow()
    app.raise_()
    qapp.exec_()

【讨论】:

以上是关于如何在 PyQt 中嵌入 Schemdraw的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyqt 中嵌入 matplotlib - For Dummies

如何在 pyqt 中嵌入 matplotlib - For Dummies

如何刷新嵌入在 PYQT4 中的 MatPlotlib?

如何在 PyQt4 小部件中嵌入的 Axes3D (matplotlib) 中启用旋转?

如何使 FigureCanvas 在嵌入 pyqt GUI 的 matplotlib 小部件中填充整个 Figure?

在 PyQT5 窗口中嵌入 VTK 对象