如何在 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 小部件中嵌入的 Axes3D (matplotlib) 中启用旋转?