Захват python оконного вывода из встроенного интерпретатора C ++ - PullRequest
2 голосов
/ 10 января 2020

Я использую boost python для встраивания интерпретатора python в приложение C ++. (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.

Я знаю, что это длинный выстрел, но есть ли способ перехватить это? Я хотел бы иметь возможность захватывать пиксели, отображаемые в этом отдельном окне, и отображать их в графическом контексте основного окна моего приложения.

Я предполагаю, что это невозможно из-за того, что я считаю, что это окно генерируется. Но хотел проверить, есть ли у кого-нибудь понимание этого вопроса.

1 Ответ

4 голосов
/ 10 января 2020

Вы можете использовать одну из бумажных копий matplotlib и сохранить пиксели холста в строку, которую можно экспортировать в ваш контекст C ++ . Ниже приведены 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 для отображения цифры в вашем основном окне.

...