Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序可以有Python GUI吗?_Python_C_Wxpython_Pyqt - Fatal编程技术网

C程序可以有Python GUI吗?

C程序可以有Python GUI吗?,python,c,wxpython,pyqt,Python,C,Wxpython,Pyqt,我的朋友有一个用C编写的应用程序,它附带了一个在Linux下使用GTK制作的GUI。现在我们想用python重写GUI(wxpython或PyQT) 我没有Python方面的经验,也不知道如何让Python与C进行通信。我想知道这是否可行,如果可行,我应该如何实现它?是的,可以从Python调用“C”函数 请查看SWIG(已弃用),Python也提供了自己的扩展性API。你可能想调查一下 还有谷歌CTypes 链接: 一个简单的例子: 我在Windows上使用了Cygwin。我在这台机器上的p

我的朋友有一个用
C
编写的应用程序,它附带了一个在Linux下使用
GTK
制作的GUI。现在我们想用python重写GUI(
wxpython
PyQT


我没有Python方面的经验,也不知道如何让Python与C进行通信。我想知道这是否可行,如果可行,我应该如何实现它?

是的,可以从Python调用“C”函数

请查看SWIG(已弃用),Python也提供了自己的扩展性API。你可能想调查一下

还有谷歌CTypes

链接:

一个简单的例子: 我在Windows上使用了Cygwin。我在这台机器上的python版本是2.6.8-通过test.py加载名为“myext.dll”的模块对其进行了测试-工作正常。您可能需要修改
Makefile
,使其在您的机器上工作

原件.h 原文.c test.py 输出 o:你好,世界

对不起,我没有python经验,所以不知道如何让python与C程序通信


是的,你就是这样做的。将C代码转换成Python模块,然后就可以用Python编写整个GUI。请参阅。

如果您在C或C#(Sharp)之间有一个选项,那么使用C#并使用visual studio,您可以轻松地通过拖放组件来构建GUI。如果要在python中执行某些操作,请查找wxPython。Java有一个内置的GUI构建器,称为swing。你需要一些教程,但除非这个程序不需要可移植,否则就用C#在10分钟内完成它


此外,您可以用C编写代码,并将其导出为python模块,您可以从python加载该模块。设置一些C函数并使用python GUI调用它们并不复杂。要实现这一点,您可以使用SWIG、Pyrex和BOOST

好的!!但这会影响我的程序性能吗??然后我的整个程序不会转换成python吗???@rathin2j:不要担心性能。不,您只使用Python编写GUI,其余代码仍然使用C。当您将C代码转换为Python模块时,它仍然使用C.oh i C!!很抱歉这个愚蠢的问题,但是,我应该在哪里编写GUI代码??在另一个文件中,在那里我必须导入那些转换的模块,对吗好的!!我想到了。。但是我不知道我能做多少。。所以我会尽量让你知道。。非常感谢你!!我可以使用SWIG吗?嗨,是的,我在搜索时发现了SWIG,但我认为它不可能使用,因为我的GTK+代码只写在c文件中,所以可能会产生问题!!hello@Aniket-我尝试了SWIG站点本身提供的一个简单代码!!出于我的娱乐,代码不起作用!!我也用同样的代码尝试了同样的过程。。!!怎么可能呢@rathin2j swig已弃用,社区不提供支持。为什么不试试Python的标准扩展呢?另外,您使用的是什么版本的python?我已经听说了它与Python 3.Xi的不兼容。SHIG可能很简单,这就是为什么我关注标准扩展,但不太理解如何实现,我在PUTHON 2.7.3上使用Ubuntu 12。10@rathin2j你没有得到它的哪一部分?这是我能举的最简单的例子
#ifndef _ORIGINAL_H_
#define _ORIGINAL_H_

int _original_print(const char *data);

#endif /*_ORIGINAL_H_*/
#include <stdio.h>
#include "original.h"

int _original_print(const char *data)
{
  return printf("o: %s",data);
}
#include <Python.h>
#include "original.h"

static PyObject *myext_print(PyObject *, PyObject *);

static PyMethodDef Methods[] = {
  {"printx", myext_print, METH_VARARGS,"Print"},
  {NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC initmyext(void)
{
  PyObject *m;
  m = Py_InitModule("myext",Methods);
}

static PyObject *myext_print(PyObject *self, PyObject *args)
{
  const char *data;
  int no_chars_printed;
  if(!PyArg_ParseTuple(args, "s", &data)){
      return NULL;
  }
    no_chars_printed = _original_print(data);
    return Py_BuildValue("i",no_chars_printed);  
}
PYTHON_INCLUDE = -I/usr/include/python2.6
PYTHON_LIB = -lpython2.6
USER_LIBRARY = -L/usr/lib
GCC = gcc -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -fPIC -DMAJOR_VERSION=1 -DMINOR_VERSION=0 -I/usr/include -I/usr/include/python2.6 

win32 : myext.o
    - gcc -shared myext.o $(USER_LIBRARY) $(PYTHON_LIB) -o myext.dll

linux : myext.o
    - gcc -shared myext.o $(USER_LIBRARY) $(PYTHON_LIB) -o myext.so

myext.o: stub.o original.o
    - ld -r stub.o original.o -o myext.o

stub.o: stub.c
    - $(GCC) -c stub.c -o stub.o

original.o: original.c
    - $(GCC) -c original.c -o original.o

clean: myext.o
    - rm stub.o original.o stub.c~ original.c~ Makefile~
import myext
myext.printx('hello world')