来自 wxPython 的 NSView*
Posted
技术标签:
【中文标题】来自 wxPython 的 NSView*【英文标题】:NSView* from wxPython 【发布时间】:2015-06-23 22:51:29 【问题描述】:我正在开发一个 Python 模块,该模块需要获取指向 NSView 的指针,以便将 OpenGL 附加到窗口。
我使用 wxPython 作为 GUI 库,它有一个 GetHandle() 方法,正如文档所述,“返回物理窗口的特定于平台的句柄(作为长整数)”。
因为我的模块必须与 Windows 和 Mac 兼容,所以我制作了一个包装函数,它需要一个 unsigned long 并将其强制转换为 void*,以便将它传递给处理 OpenGL 创建的实际方法。
void wrap_CreateContext(unsigned long windowId)
return CreateContext((void*)&(windowId));
在 Windows 上一切正常,但在 Mac 上,当我尝试将 void* 转换为 NSView* 然后使用该 NSView* 时,调试器给我一个 EXC_BAD_ACCESS 错误。
这就是我将 void* 转换为 NSView* 的方式:
void CreateContext(void* windowId)
NSView* view = (NSView*)windowId;
// for example I try to get the view size
NSSize size = view.frame.size; // <--- EXC_BAD_ACCESS error
我真的不知道问题出在我从 unsigned long 到 void* 然后从 void* 到 NSView* 的转换中,还是问题出在其他地方。
我正在使用的 wxPython 版本是基于 Cocoa 构建的,因此我应该从 GetHandle() 获取指向 NSView 的指针。
【问题讨论】:
【参考方案1】:找到了解决办法。问题在于我从 long 转换为 void* 并返回 NSView*。
直接从 long 投射到 NSView* 效果很好。
【讨论】:
去掉wrap_CreateContext()中的“&”以上是关于来自 wxPython 的 NSView*的主要内容,如果未能解决你的问题,请参考以下文章
设置上的wxpython错误 - ModuleNotFound:没有名为'wx'的模块
python桌面开发,为啥选择PyQt或wxPython,而不使用Tkinter?
使用来自 XIB 的自定义 NSView/UIView 子类?