Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C++;嵌入式解释器 我使用Boost Python在PC++应用程序中嵌入Python解释器。 (pybind11也可以)_Python_C++_Matplotlib_Boost Python_Pybind11 - Fatal编程技术网

从C++;嵌入式解释器 我使用Boost Python在PC++应用程序中嵌入Python解释器。 (pybind11也可以)

从C++;嵌入式解释器 我使用Boost Python在PC++应用程序中嵌入Python解释器。 (pybind11也可以),python,c++,matplotlib,boost-python,pybind11,Python,C++,Matplotlib,Boost Python,Pybind11,如果我从嵌入式解释器调用matplotlib,如下所示: import matplotlib.pyplot as plt import numpy as np plt.plot([1,2,3,4],[1,4,9,16]) plt.show() python解释器打开一个新窗口(与我的应用程序的主窗口分开)以显示matplotlib绘图 我知道这是一个远射,但有什么方法可以拦截它吗? 我希望能够捕获在这个单独窗口中显示的像素,并将它们显示在应用程序主窗口的图形上下文中 我猜这是不可能的,因为我相

如果我从嵌入式解释器调用matplotlib,如下所示:

import matplotlib.pyplot as plt
import numpy as np
plt.plot([1,2,3,4],[1,4,9,16])
plt.show()
python解释器打开一个新窗口(与我的应用程序的主窗口分开)以显示matplotlib绘图

我知道这是一个远射,但有什么方法可以拦截它吗? 我希望能够捕获在这个单独窗口中显示的像素,并将它们显示在应用程序主窗口的图形上下文中

我猜这是不可能的,因为我相信窗口是如何生成的。
但是想检查是否有人对此有任何见解。

您可以使用matplotlib的其中一个,并将画布的像素保存到可以编辑的字符串中。下面是python代码:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot

fig = matplotlib.pyplot.figure()
ax  = fig.add_subplot ( 111 )

ax.plot([1,2,3,4],[1,4,9,16])

fig.canvas.draw ()

w,h = fig.canvas.get_width_height()  # width and height of the canvas
buf = fig.canvas.tostring_argb()     # a byte string of type uint8 

< >你的C++代码中,你可以使用变量<代码> W<代码>代码>代码> h <代码>和<代码> BUF来显示主窗口中的图形。我认为没有办法去不确定地拦截(不改变Python代码)吗?如果你的意思是,你可以把Python代码翻译成相应的C++代码。例如,
py::object matplotlib=py::module::import(“matplotlib”);py::object mpluse=matplotlib.attr(“使用”);mpluse(“Agg”)。。。(使用pybind11)谢谢。python用户仍然需要调用“buf=fig.canvas.tostring_argb()”。但似乎没有办法解决这个问题。