【问题标题】:how to embed Schemdraw inside PyQt如何在 PyQt 中嵌入 Schemdraw
【发布时间】: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()

【问题讨论】:

    标签: python matplotlib pyqt5


    【解决方案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_()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多