[PyQt] sip cmodule.cpp

Phil Thompson phil at riverbankcomputing.co.uk
Mon Apr 9 14:10:08 BST 2007


On Monday 09 April 2007 1:16 pm, Bart wrote:
> > On Saturday 07 April 2007 11:49 pm, Bart wrote:
> >> I have some questions:
> >> 1. Why sip don't generate also name_of_module_cmodule.h ?
> >
> > Because there is no need for it.
> >
> >> 2. Why in name_of_module_cmodule.cpp there is no deinit_module()
> >> function? I'm asking because after Py_Finalize() and
> >> PyInitialize();init_module(); have application crash.
> >
> > The module initialisation function is only meant to be called by the
> > interpreter.
> >
> > Phil
>
> But ... for statically-linked module  I must call init_module_function()
> directly after Py_Initialize();
> http://docs.python.org/ext/methodTable.html

I've always used PyImport_AppendInittab() instead.

> Maybe I done something wrong and that's why have got problem.
>
> It is possible to deinit this sip generated module?
>
> Thanks a lot for Your help.
>
>
>
> Just for clear :
>
> [uzi at uzi python_scripting]$ cat kadu.sip
> %Module kadu
> %Import qt/qtmod.sip
>
> %Include about.sip
> [uzi at uzi python_scripting]$ cat about.sip
>
> class About : QHBox
> {
>
> %TypeHeaderCode
> #include "kadu-headers/about.h"
> %End
>         public:
>
>                 About(QWidget *parent /TransferThis/, const char
> *name=NULL);
>                 ~About();
> };
> [uzi at uzi python_scripting]$ cat kadu-headers/about.h
> #ifndef ABOUT_H
> #define ABOUT_H
>
> #include <qstring.h>
> #include <qhbox.h>
> #include <qwidget.h>
>
> class LayoutHelper;
> class QResizeEvent;
>
> class About : public QHBox {
>         Q_OBJECT
>
>         public:
>                 About(QWidget *parent=NULL, const char *name=NULL);
>                 ~About();
>
>         private:
>                 QString loadFile(const QString &name);
>                 void keyPressEvent(QKeyEvent *);
>                 LayoutHelper *layoutHelper;
>         protected:
>                 virtual void resizeEvent(QResizeEvent *);
> };
>
> #endif
>
>
> In plugin module
>
> on load :
>
> Python::Python()
> {
>     Py_Initialize();
>     initkadu();
>     PyRun_SimpleString("from time import time,ctime\n"
>                      "print 'Today is',ctime(time())\n"
>              "from qt import *\n"
>              "print '1'\n"
>              "import kadu\n"
>              "print '2'\n"
>              "kadu.About()\n"
>              "print '3'\n"
>              "dir([])\n"
>              "print '4'\n");
> }
>
> on unload :
>
> Python::~Python()
> {
>     Py_Finalize();
> }

Have you tried removing the call to initkadu()?

You are importing the kadu module later on so there is no need to explicitly 
call initkadu() - so long as PyImport_AppendInittab() was called.

There is no way to explicitly unload a module.

Phil


More information about the PyQt mailing list