Запуск методов объектов Boost-Python из пользовательских модулей

Я пытаюсь импортировать пользовательский объект Python (Chart) в некоторый код C++, используя boost:: python. Вот некоторый соответствующий объектный код Python:

chart.py:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib.style as style
import pandas

class Chart(object):
    def __init__(self):
        self.fig = plt.figure()
        self.fig.canvas.set_window_title('Data')
        self.ax1 = self.fig.add_subplot(1,1,1)
        self.ani = animation.FuncAnimation(self.fig,self.animate, interval=10)
        self.data = pandas.DataFrame({"time":np.array([0]),"c":np.array([0]),"b":np.array([0])})
        self.data.set_index("time", drop=True, inplace=True)
        self.visible = False

    def show(self):
        if self.visible == False:
            self.visible = True
            plt.show()

Я пытаюсь использовать этот объект в некотором коде C++, ниже:

grapher.cpp

#import <boost/python.hpp>
#import <string>
#import <Python.h>
#include <iostream>

namespace py = boost::python;

int main(int argc, char ** argsv)
{
  // Try to run, otherwise give an error
  try{
       // Add the current working directory to the python path variable so that chart.py can be imported.
       setenv("PYTHONPATH", ".", 1);
       Py_Initialize();

       // Import the chart module
       py::object mod = py::import("chart");
       // Create the chart object
       py::object myChart = mod.attr("Chart")();
       // Show the chart
       myChart.show();
   }
   catch(boost::python::error_already_set const &){
       std::string perror_str = parse_python_exception();
       std::cout << "Error in Python: " << perror_str << std::endl;
   }

  return 0;
}

Однако, когда я пытаюсь скомпилировать, я получаю следующую ошибку:

grapher.cpp: In function ‘int main(int, char**)’:
grapher.cpp:73:16: error: ‘class boost::python::api::object’ has no member named ‘show’
    myChart.show();

Я еще не очень хорошо разбираюсь в C++, поэтому вполне возможно, что мне не хватает чего-то очевидного. Любая помощь будет принята с благодарностью!

0 ответов

Другие вопросы по тегам