Shiboken模块#

函数#

  • def isValid (obj)

  • def wrapInstance (address, type)

  • def getCppPointer (obj)

  • def delete (obj)

  • def isOwnedByPython (obj)

  • def wasCreatedByPython (obj)

  • def dump (obj)

  • def disassembleFrame (marker)

详细描述#

此Python模块可用于访问与我们的绑定技术相关的内部信息。访问此内部信息是必需的,例如:将PySide与提供Python脚本的基于Qt的程序(如Maya™)集成,或仅用于调试目的。

某些函数描述中提到的“Shiboken对象”,这意味着使用Shiboken创建的任何Python类型的实例。

导入模块

from shiboken6 import Shiboken
Shiboken.isValid(obj)#

给定一个Python对象,如果对象方法可以在未引发异常的情况下调用,则返回True。当底层C++对象被销毁或无法访问时,Python包装器变为无效。

Shiboken.wrapInstance(address, type)#

为给定内存地址处实例化的C++对象创建一个Python包装器 - 返回的对象类型将与用户给定的相同。

类型必须是Shiboken类型,当返回的Python对象达到零引用时,C++对象不会被销毁。

如果地址无效或没有指向给定类型的C++对象的指针,行为将是未定义的。

Shiboken.getCppPointer(obj)#

返回一个包含给定对象所包裹的C++实例内存地址的长整数元组。

Shiboken.delete(obj)#

删除给定的Python对象所包裹的C++对象。

Shiboken.isOwnedByPython(obj)#

给定一个Python对象,如果Python负责删除底层的C++对象,则返回True,否则返回False。

如果对象不是基于Shiboken的对象,则抛出TypeError。

Shiboken.wasCreatedByPython(obj)#

如果给定的Python对象是由Python创建的,则返回true。

Shiboken.dump(obj)#

返回包含对象实现定义信息的字符串。此方法应仅由创建自己绑定的开发人员用于调试目的,因为在不同版本之间,字符串格式不保证相同。

如果对象不是基于Shiboken的对象,则打印一条消息。

Shiboken.disassembleFrame(label)#

将当前执行的Python帧打印到stdout并刷新。反汇编通过某些标签装饰。例如

lambda: 42

在C++内部表示为

<label> BEGIN
  1           0 LOAD_CONST               1 (42)
              2 RETURN_VALUE
<label> END

当你想要在disassembleFrame函数中设置断点并从C++中使用它时,你使用纯函数名。

当你想要从Python中使用它时,你可以将其插入到你的Python代码中,然后可能设置在生成的包装器上,即SbkShibokenModule_disassembleFrame

label是C++中的简单字符串。在Python中,你可以使用任何对象;内部会调用它的str函数。

此方法应仅由开发人员用于调试目的。

class Shiboken.VoidPtr(address, size=-1, writeable=0)#
参数:
  • address – (PyBuffer, SbkObject, int, VoidPtr)

  • size – int

  • writeable – int

通过地址和大小表示内存块,并实现了buffer协议。它可以由一个buffer,一个基于Shiboken的对象,一个内存地址或其他VoidPtr实例构建。

toBytes()#
返回类型:

bytes

bytes返回内容。