标签:
这里介绍一种典型的C++应用框架,使用Python进行扩展。比如GIMP/Blender/QGIS等等Linux上面的开源软件,还有很多商业软件也采用了这一技术路线。但是由于Python的灵活性,可以使用C/C++直接扩展,或者基于SWIG、PyQt、PythonQt进行扩展,导致具体实现上存在较大的差异。这里介绍一个笔者摸索的使用Qt+SIP+PyQt+Python的技术路线,是功能比较强大、技术成熟、封装工作量相对较小的一种,而且具有商业级的发展潜力。
大部分的关于Python插件介绍都是关于Python本身的,因为Pytho是个动态语言,实现这一点并不难,但在很多应用中,对性能要求较高,一般需要用C/C++来实现。然后,把Python解释引擎嵌入进去,方便用户进行参数定制、功能扩展和模块组装。
一般情况下,我们把主程序的C++类通过SIP进行封装,然后就可以在Python Shell中通过Python直接调用了。
然后再把Python的控制台集成到主程序窗口中,就可以直接通过Python控制主窗口的操作。这里需要干两件事情,一是把控制台窗口嵌入主窗口中,二是要把主程序的对象句柄传给Python解释器环境。如果由Python自行初始化,主窗口的对象和解释器的对象就不是同一个,无法相互操作。当然,也可以通过全局静态对象等方式共享主程序,但不建议这样做,会影响后续程序的可扩展性。
(未完待续)
标签:
原文地址:http://my.oschina.net/u/2306127/blog/489853