C程序可以使用Python GUI吗?

时间:2012-11-01 07:52:00

标签: python c wxpython pyqt

我的朋友有一个用C编写的应用程序,它带有在Linux下使用GTK创建的GUI。现在我们想要在python中重写GUI(wxpythonPyQT)。

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

3 个答案:

答案 0 :(得分:5)

是的,可以打电话给C'来自Python的函数。

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

也是谷歌CTypes。

LINKS:

Python Extension

一个简单的例子: 我在Windows上使用了Cygwin。我在这台机器上的python版本是2.6.8 - 使用test.py加载名为" myext.dll"的模块进行测试。 - 它工作正常。您可能希望修改Makefile以使其在您的计算机上运行。

original.h

#ifndef _ORIGINAL_H_
#define _ORIGINAL_H_

int _original_print(const char *data);

#endif /*_ORIGINAL_H_*/

original.c

#include <stdio.h>
#include "original.h"

int _original_print(const char *data)
{
  return printf("o: %s",data);
}

stub.c

#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~

test.py

import myext
myext.printx('hello world')

输出

  

o:你好世界

答案 1 :(得分:2)

  

抱歉,我没有python经验,所以不知道如何让Python与C程序通信。

是的,这正是你如何做到的。将您的C代码转换为Python模块,然后您可以用Python编写整个GUI。请参阅Extending and Embedding the Python Interpreter

答案 2 :(得分:0)

如果您在C或C#(夏普)之间有选项,那么使用C#并使用visual studio,您可以通过轻松拖放组件来构建GUI。如果你想在python中做一些事情,请查看 wxPython 。 Java有一个内置的GUI构建器,称为swing。你需要一些教程,但除非这个程序不需要是可移植的,否则只需使用C#并在10分钟内构建它。

此外,您可以在C中编写代码并将其导出为python模块,您可以从python加载它。设置一些C函数并使用调用它们的python GUI并不是很复杂。为此,您可以使用 SWIG,Pyrex,BOOST