Windows 32 上的 PySide 和 VTK

Posted

技术标签:

【中文标题】Windows 32 上的 PySide 和 VTK【英文标题】:PySide and VTK on Windows 32 【发布时间】:2013-04-04 14:10:37 【问题描述】:

我有一个 PySide/VTK 应用程序,使用 QVTKRenderWindowInteractor 连接。 PySide 1.0.9 在带有 QT4.8/VTK 5.8 的基于 Unix 的系统上运行良好。 (所有 Python 2.7.3)

然后我移植到 Microsoft Windows 系统 (XP 32) 上,使用 PySide win32 分发版 (1.1.x) Qt4 和 VTK 5.10,我在 QVTKRenderWindowInteractor 中出现类型错误,同时检索 self.winId()可转换为 int:

TypeError: int() argument must be a string or a number, not 'PyCObject'

PySide API 实际上说 PySide.QtGui.QWidget.winId() 返回一个 long...

我正在 MS-Windows 和 Unix 上开始更多测试,但也许你们中的一些人可以给我一些建议? 我必须在哪里寻找什么?

这可能与 32 位 系统上的这个 long 的错误转换有关,由 PySide 接口生成器生成到 Qt?

见第 152 行 http://sourceforge.net/p/pycgns/code/ci/17b696c3b0ad2b387b7e0ddc5d9b195cbc6abf70/tree/NAVigater/CGNS/NAV/Q7VTKRenderWindowInteractor.py

【问题讨论】:

注册为 PySide 错误:bugreports.qt-project.org/browse/PYSIDE-46 并使用此错误报告中描述的提示进行修复。 【参考方案1】:

将此行替换为:

WId = self.winId()

if type(WId).__name__ == 'PyCObject':
    from ctypes import pythonapi, c_void_p, py_object

    pythonapi.PyCObject_AsVoidPtr.restype  = c_void_p
    pythonapi.PyCObject_AsVoidPtr.argtypes = [py_object]

    WId = pythonapi.PyCObject_AsVoidPtr(WId)

self._RenderWindow.SetWindowInfo(str(int(WId)))

【讨论】:

以上是关于Windows 32 上的 PySide 和 VTK的主要内容,如果未能解决你的问题,请参考以下文章

PySide2(Qt for Python)在 Linux 上的 Qt Designer 安装在哪里?

无法从 Pyside 导入 QtCore

PySide for Python 2.7.2 ImportError DLL 加载在 Win32 上失败

QTableView 上的 PySide 委托,带有文本和刻度

安卓上的 PySide QML 项目

安装 PySide - Windows 8