FAQ
I looking at Python as a possible language for embedding in an application I
am working on. Unfortunately I don't seem to be able to get a very simple
script to work the same when embedded and when run within Python. To help
illustrate my problem I have included a simple example, consisting of the
following bits:

embed.c is a simple program that executes the hello()
function in the embed.py script.
embed.py is a simple script, using Tk, that displays a
window with a button in it
embed.traceback is the result when running hello() inside
embed.c

If I try:
python embed.py
everything works fine, if i try:
embed
I get the traceback guff detailed below.

What am I doing wrong?

I am using Python 2.0 release.

Help!

Cliff


--- embed.c starts ---

#include <Python.h>

int main(int argc, char** argv)
{
PyObject* module = 0;
PyObject* func = 0;
PyObject* args = 0;
PyObject* rc = 0;

Py_SetProgramName(argv[0]);
Py_Initialize();
PySys_SetArgv(argc, argv);
printf("Welcome to a brave new world\n\n");

/* Initialise the Python module and function */
module = PyImport_ImportModule("embed");
if (module == NULL) {
PyErr_Clear();
printf("Unable to import embed module\n");
goto bye;
}

func = PyObject_GetAttrString(module, "hello");
if (func == NULL) {
PyErr_Clear();
printf("Unable to bind to hello function in detect module\n");
goto bye;
}

rc = PyEval_CallObject(func, NULL);
if (rc == NULL) {
PyErr_Print();
} else {
Py_DECREF(rc);
}
bye:
Py_XDECREF(func);
Py_XDECREF(module);
Py_Exit(0);
}

--- embed.c ends ---

--- embed.py starts ---

from Tkinter import *

def hello():
ok = Button(None, text='Ok')
ok.pack()
ok.mainloop()

if __name__ == '__main__':
hello()

--- embed.py ends ---

--- embed.traceback starts ---

Traceback (most recent call last):
File "embed.py", line 4, in hello
ok = Button(None, text='Ok')
File "e:\program files\python20\lib\lib-tk\Tkinter.py", line 1819, in
__init__
Widget.__init__(self, master, 'button', cnf, kw)
File "e:\program files\python20\lib\lib-tk\Tkinter.py", line 1752, in
__init__
BaseWidget._setup(self, master, cnf)
File "e:\program files\python20\lib\lib-tk\Tkinter.py", line 1727, in
_setup
_default_root = Tk()
File "e:\program files\python20\lib\lib-tk\Tkinter.py", line 1482, in
__init__
self.tk = _tkinter.create(screenName, baseName, className)
TclError: Can't find a usable init.tcl in the following directories:
{} {e:/program files/python20/lib/tcl8.3} E:/Home/embed/lib/tcl8.3
E:/Home/lib/tcl8.3 E:/Home/lib/tcl8.3/library E:/Home/library
E:/Home/../tcl8.3/library E:/../tcl8.3/library



This probably means that Tcl wasn't installed properly.

--- embed traceback.ends ---

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedOct 18, '00 at 10:22p
activeOct 18, '00 at 10:22p
posts1
users1
websitepython.org

1 user in discussion

Cliff Penton: 1 post

People

Translate

site design / logo © 2022 Grokbase