簡體   English   中英

將Python程序嵌入到GTK應用程序中(用C語言編寫)

[英]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 == &GTK_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 == &GTK_CSS_VALUE_RGBA' failed

(process:25913): Gtk-CRITICAL **: _gtk_css_rgba_value_get_rgba: assertion `rgba->class == &GTK_CSS_VALUE_RGBA' failed


.
.
.

您輸入了mport numpy as np錯過了i 另外,您必須為argv導入sys模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM