I create class: FOClassName:= PyString_FromString(ClasName); FClass:= PyClass_New(nil, FDict, FOClassName); PyDict_SetItemString(FDict, ClasName, FClass); Py_DECREF(FOClassName); Py_DECREF(FDict); Py_DECREF(FClass);
Add methods for it: MyFunc:=PyCFunction_New(MyMethod, nil); MyMeth:=PyMethod_New(MyFunc, nil, FClass); PyDict_SetItemString(FDict, AMethodName, MyMeth); Py_DECREF(MyFunc); Py_DECREF(MyMeth); I place all it in my Delphi class and then create 1 class: pyGL_Class:=TPythonClass.Create(Python.PyScript.GetPyDict,'pySky3D_Window'); pyGL_Class.AddClassMethod('__init__',pyWindowClassInit,''); pyGL_Class.AddClassMethod('_Show',pyWindowShow,''); pyGL_Class.AddClassMethod('_Hide',pyWindowHide,''); pyGL_Class.AddClassMethod('_OnMouseOver',pyOnMouseOver,''); pyGL_Class.AddClassProperty('_Win_id','winid'); pyGL_Class.AddClassProperty('_Winpos_x',0); pyGL_Class.AddClassProperty('_Winpos_y',0); pyGL_Class.AddClassProperty('_Win_width',0); pyGL_Class.AddClassProperty('_Win_height',0); pyGL_Class.AddClassProperty('_Win_header','window header'); pyGL_Class.AddClassProperty('_Visible',0); pyGL_Class.Free; #Class defining window class Sky3D_Windows(sky3d.pySky3D_Window): def test(self): print "Hello" def _OnMouseOver(self): #self._Hide() pass MouseCursWin=Sky3D_Windows('CMouseWin','MouseWinFunc',400,300,100,100,'Mouse','font5') All work fine, but if i add new class same way {pySky3D_Button} pyGL_Class:=TPythonClass.Create(Python.PyScript.GetPyDict,'pySky3D_Button'); pyGL_Class.AddClassMethod('pySky3D_Button.__init__',pyButtonClassInit,''); pyGL_Class.AddClassProperty('_Btn_id','Button_id'); pyGL_Class.Free; it give me error: Traceback (most recent call last): File "D:\sky3d\src\script\sky3d.py", line 32, in OnInit from window import * File "D:\sky3d\src\script\window.py", line 18, in ? CoordWin=Sky3D_Windows('CoordWin','CoordWinFunc',15,Sky3D_GetMainWinRec()[1] - (250),150,200,'Camera','font5') TypeError : unbound method __init__() must be called with pySky3D_Button instance as first argument (got str instance instead) I to little know class embeding in Python, but suspect that __init__ become base for all classes??? Or what? In documentation i did not find info about PyClass_New and other. But it says that i must some how use instance of class, but i can't understand how i can get instance non created class... Full source in https://opensvn.csie.org/sky3d or here https://opensvn.csie.org/traccgi/sky3d -- http://mail.python.org/mailman/listinfo/python-list