如何在wxWidgets (c++) 应用中嵌入wxPython

0 投票
1 回答
644 浏览
提问于 2025-04-17 23:09

我正在用 MSVC++ 开发一个 wxWidgets-3.0 的应用程序,并且里面嵌入了 wxPython-3.0。

虽然我的系统已经安装了 Python 2.7 和 wxPython-3.0,但我还是做了以下操作:(因为我们需要确保 wxWidgets 应用程序、Python 和 wxPython 的构建配置一致)

  • 我下载并构建了 wxWidgets,选择了 64 位的 DLL-Debug 模式,然后成功运行了一个最小示例项目。

    我下载了 Python 2.7 的源代码,并在 64 位的 Debug 模式下构建,然后把调试用的 DLL 和库文件复制到了 Python 的安装文件夹(\DLLs 和 \libs)。

    我下载了 wxPython 3.0 的源代码,并在 64 位的 DLL-Debug 模式下构建,然后把调试用的 DLL 和库文件复制到了 Python 的安装文件夹(\Lib\site-packages\wx-3.0-msw\wx)。

我从 wxPython 的嵌入示例中获取了 embedded.cpp 文件,并把里面的代码复制到了我 wxWidgets 示例项目的 minimal.cpp 文件中。

项目属性设置:

c/c++:

  General    --  Additional include directories

                     C:\Python27\include

                     .\..\..\lib\vc_dll\mswud

                     .\..\..\include

链接器:

   General    --   Additional library directories

                         C:\Python27\libs

                         D:\Nuvsoft27\newpy\wxWidgets-3.0.0\lib\vc_dll


   Input         --   Additional dependncies

                          wxmsw30ud_core.lib
                                     .
                                     .
                                     .
                          Python27_d.lib

系统环境变量。

 PATH   --    D:\Nuvsoft27\newpy\wxWidgets-3.0.0\lib\vc_dll

PYTHONPATH -- C:\Python27;C:\Python27\Lib\site-packages\wx-3.0-msw

问题:

在 wxPyCoreAPI_IMPORT() 函数中出现了错误,它返回了 false。

请问你能帮我解决这个问题吗?我是不是做错了什么。

你可以在这里看到 调用栈

wxPyCoreAPI_IMPORT() --> 

(wxPyCoreAPI*)PyCObject_Import("wx._core_", "_wxPyCoreAPI")  -->

PyImport_ImportModule(module_name) --> PyImport_Import(pname) -->

PyObject_CallFunction(import, "OOOOi", module_name, globals, globals, silly_list, 0, NULL);     --> 

call_function_tail(callable, args) --> PyObject_Call(callable, args, NULL) -->

PyCFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) --> 

 builtin___import__(PyObject *self, PyObject *args, PyObject *kwds) -->

PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,  PyObject *fromlist, int level)  -->

 import_module_level(name, globals, locals, fromlist, level) -->

load_next(parent, level < 0 ? Py_None : parent, &name, buf,  &buflen); --> 

import_submodule(mod, p, buf); 

在上面的函数中,他们在检查模块,如果 mod == Py_None,就返回 NULL,而它确实进入了这个条件并返回了 NULL。

1 个回答

0

你可能还需要把 c:\Python27\Lib\site-packages\wx-3.0-msw 加入到 PYTHONPATH 里。

撰写回答