После некоторого времени, проведенного в Интернете, представляется возможным встроить Python в tkinter, qt5 и т. Д. Однако мне интересно, возможно ли просто встроить его в приложение Windows. Подобно тому, как Jupyter встраивается с %matplotlib inline
, мне интересно, возможна ли подобная функциональность для приложений Windows.
#include <Windows.h>
#include <stdio.h>
#include <python.h>
LPARAM CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
switch (msg) {
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
}
#pragma comment(linker, "/SUBSYSTEM:CONSOLE /ENTRY:WinMainCRTStartup")
#pragma warning(suppress: 28251) // Inconsistent Annotation Suppression
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc = {};
wc.lpszClassName = "customWindow";
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
RegisterClassEx(&wc);
HWND hwnd = CreateWindow("customWindow", "Testing embedded matplotlib", WS_OVERLAPPEDWINDOW, 100, 100, 1000, 1000, NULL, NULL, hInstance, NULL);
UpdateWindow(hwnd);
ShowWindow(hwnd, SW_SHOW);
Py_Initialize();
const char* code =
R"(
import matplotlib.pyplot as plt
import numpy as np
plt.plot(np.sin(np.linspace(0, 100, 1000)))
plt.show()
)";
PyRun_SimpleString(code);
Py_Finalize();
MSG message;
while (GetMessage(&message, NULL, 0, 0) > 0)
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return static_cast<int>(message.wParam);
}
В этом неполном примере (отдельное окно matplotlib открывается отдельно), я хотел бы выяснить, возможно ли переписать окно matplotlib в мастер hwnd. В идеале, я бы хотел, чтобы у matplotlib была интерактивность, поэтому попытка сделать bitblt из внутреннего буфера matplotlib для меня невозможна.