[英]Embedding python program in a GTK application (in C)
我正在編寫GTK + GUI(C語言)應用程序,我之前已經快速開發了執行某些任務的pygtk GUI應用程序。 現在,我希望不再只是用C和GTK +重寫整個Pygtk GUI及其計算例程,而是希望僅按C GUI中的一個按鈕並取消python GUI。
最初嘗試使用C代碼調用python GUI,但在運行時崩潰,它抱怨GTK導入和分段錯誤。
請注意,Python GUI獨立應用程序可以正常運行(獨立文件的名稱為FPG.py)。
那么如何有效地將模塊和庫從python導入C / C ++
這是我所做的:
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_Initialize();
FILE *fp = fopen ("FPG.py", "r+");
PyRun_SimpleString("#!/usr/bin/python2.7");
PyRun_SimpleString("import sys ");
PyRun_SimpleString("from scipy.integrate import odeint ");
PyRun_SimpleString("import math ");
PyRun_SimpleString("import csv ");
PyRun_SimpleString("from decimal import *");
PyRun_SimpleString("from math import pi ");
PyRun_SimpleString("import numpy as np");
PyRun_SimpleString("from datetime import datetime");
PyRun_SimpleString("from time import mktime ");
PyRun_SimpleString("from gi.repository import Gtk, Gio");
PyRun_SimpleString("import os");
PyRun_SimpleString("from datetime import datetime");
PyRun_SimpleString("from time import mktime");
// the actual file
PyRun_SimpleFile(fp,"FPG.py");
Py_Finalize();
return 0;
}
我按如下方式編譯了程序(我知道它是C ++編譯器):
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'
(process:25913): Gtk-CRITICAL **: _gtk_style_cascade_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed
(process:25913): Gtk-CRITICAL **: _gtk_style_provider_private_lookup: assertion `GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed
(process:25913): Gtk-CRITICAL **: _gtk_css_lookup_resolve: assertion `GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed
(process:25913): Gtk-CRITICAL **: _gtk_css_rgba_value_get_rgba: assertion `rgba->class == >K_CSS_VALUE_RGBA' failed
(process:25913): Gtk-CRITICAL **: _gtk_style_provider_private_lookup: assertion `GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed
(process:25913): Gtk-CRITICAL **: _gtk_css_lookup_resolve: assertion `GTK_IS_STYLE_PROVIDER_PRIVATE (provider)' failed
(process:25913): Gtk-CRITICAL **: _gtk_css_rgba_value_get_rgba: assertion `rgba->class == >K_CSS_VALUE_RGBA' failed
(process:25913): Gtk-CRITICAL **: _gtk_css_rgba_value_get_rgba: assertion `rgba->class == >K_CSS_VALUE_RGBA' failed
.
.
.
您輸入了mport numpy as np
錯過了i
。 另外,您必須為argv
導入sys
模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.