困境:我正在扩展pyqtgraph以显示内联图。在核心,这应该意味着添加class PlotWindow(PlotWidget):
…
def _repr_png_(self):
exp = ImageExporter(self.plotItem)
qimg = exp.export(toBytes=True)
qbytearray = Qt.QByteArray()
buffer = Qt.QBuffer(qbytearray)
buffer.open(Qt.QIODevice.ReadWrite)
qimg.save(buffer, 'PNG')
buffer.close()
return bytes(buffer.data())
方法就足够了:
%gui qt4
在实践中,当我尝试
时import PyQt4
import pyqtgraph
pw = pyqtgraph.plot(range(100))
pw.show()
pw
_repr_png_
我希望Jupyter笔记本能够调用<pyqtgraph.graphicsWindows.PlotWindow at 0x7f5f43666708>
方法。相反,我得到了简单的
pw.show()
现在,如果我添加一个瘦包装器(在此之前调用class myclass(object):
def __init__(self, pw):
self._pw = pw
def _repr_png_(self):
return self._pw._repr_png_()
myobj = myclass(pw)
myobj
):
map
我得到了一个内嵌图,正如预期的那样。那么,我在这里做错了什么?为什么不使用这种方法?
答案 0 :(得分:1)
问题在于PlotWidget.__getattr__()
在被要求输入错误属性时错误地引发了NameError
而不是AttributeError
。这会导致在IPython.utils.dir2.get_real_method()
内发生的一些额外检查,导致该方法被忽略。
如果您修改PlotWidget.__getattr__()
来代替AttributeError
,那么一切都会按预期进行。