[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