가 나는 C에서 간단한 Pygtk 창을 통합하고 싶습니다/C++ 응용 프로그램 (이유는 pyGtk에서 이전에 설계된 GUI 존재하게 통합 할 수있는 더 큰 GTK + (응용 프로그램) C에서)C/C++ 응용 프로그램에서 Pygtk를 사용하는 방법은 무엇입니까?
나는 분할 오류 오류가 발생
내가 한 여기에 무엇을 : 파이썬에서
=====> (tmp.py) :
#!/usr/bin/python
#from gi.repository import Gtk, Gio
win=Gtk.Window()
win.connect("delete-event",Gtk.main_quit)
win.show_all()
Gtk.main()
======> C/C++에서 (simple.cpp) :
난 그냥 그 작은 창에게 내가 어떤 방법으로 컴파일
#include <Python.h>
int main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_Initialize();
FILE *fp = fopen ("tmp.py", "r+");
PyObject *mainModule = PyImport_AddModule("__main__");
PyObject * subModules = PyList_New(0);
PyList_Append(subModules, PyString_FromString("Gtk"));
PyList_Append(subModules, PyString_FromString("Gio"));
PyObject *Gtkstuff = PyImport_ImportModuleEx("gi.repository",NULL,NULL,subModules);
PyObject *GtkMod =PyObject_GetAttr(Gtkstuff,PyString_FromString("Gtk"));
PyObject *GioMod =PyObject_GetAttr(Gtkstuff,PyString_FromString("Gio"));
PyModule_AddObject(mainModule, "Gtk", GtkMod);
PyModule_AddObject(mainModule, "Gio", GioMod);
PyRun_SimpleFile(fp,"tmp.py");
Py_Finalize();
return 0;
}
방법을 실행하려는입니다
g++ $(python-config --cflags) -o simple $(python-config --ldflags) ./simple.cpp
출력 :
이Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib64/python2.7/site-packages/gi/importer.py", line 68, in load_module
dynamic_module._load()
File "/usr/lib64/python2.7/site-packages/gi/module.py", line 291, in _load
overrides_modules = __import__('gi.overrides', fromlist=[self._namespace])
File "/usr/lib64/python2.7/site-packages/gi/overrides/Gtk.py", line 1502, in <module>
initialized, argv = Gtk.init_check(sys.argv)
AttributeError: 'module' object has no attribute 'argv'
Traceback (most recent call last):
File "tmp.py", line 5, in <module>
win=Gtk.Window()
File "/usr/lib64/python2.7/site-packages/gi/overrides/Gtk.py", line 415, in __init__
if not initialized:
NameError: global name 'initialized' is not defined
어떤 python 버전을 사용하고 있습니까? –
python2.7이고 pygtk는 버전 3입니다. –
'Py_SetProgramName' 함수가'wchar_t * '대신'char *'인수를 사용하는지 확인하십시오. 그리고'g ++'가 필요없는 C 컴파일러를 사용하십시오. 'simple.cpp '대신'simple.c' 파일의 이름을 바꾸고'gcc $ (python-config --cflags) -o simple $ (python-config --ldflags) simple.c'로 컴파일하십시오. –