Can't load Tkinter in embedded Python interpreter on Windows
Kevin Walzer
kw at codebykevin.com
Tue Apr 5 07:26:17 EDT 2016
I am trying to build a stub exe on Windows that embeds Python and
launches my Tkinter app. I want a full-blown exe program starter because
the various Python freezing tools (py2exe, pyinstaller) do not work to
my satisfaction with Python 3.5.
I am able to get the executable built but I cannot get it to load
Tkinter and run. The current error is:
"AttributeError: module 'sys' has no attribute 'argv'"
when called from the Tkinter init method.
Here is my command-line invocation for the compiler:
---
gcc quickwho.c -I
\C:\Users\kevin\AppData\Local\Programs\Python\Python35\include
-LC:\Users\kevin\AppData\Local\Programs\Python\Python35\libs
-LC:\Users\kevin\AppData\Local\Programs\Python\Python35\DLLs -lShlwapi
-lpython35 -o quickwho.exe
----
And here is my C stub launcher:
#include
<C:/Users/kevin/AppData/Local/Programs/Python/Python35/include/Python.h>
#include <Windows.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <tchar.h>
int main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]);
Py_Initialize();
TCHAR exedir [MAX_PATH];
#if 0
GetModuleFileName(NULL, exedir, MAX_PATH);
_tprintf("%s/n", exedir);
PathRemoveFileSpec(exedir);
_tprintf("%s/n", exedir);
#endif
/*Get the module's full path, and set to the current working
directory.*/
if (!GetModuleFileName(NULL, exedir, MAX_PATH)) {
TCHAR errmsg[512];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,
GetLastError(),0,errmsg,1024,NULL);
_tprintf( TEXT("The path is %s, and the error is %s/n"), exedir,
errmsg );
}
if (!PathRemoveFileSpec(exedir)) {
TCHAR errmsg[512];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,
GetLastError(),0,errmsg,1024,NULL);
_tprintf( TEXT("The target dir is %s, and the error is %s/n"),
exedir, errmsg );
}
if (!SetCurrentDirectory(exedir)) {
TCHAR errmsg[512];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,
GetLastError(),0,errmsg,1024,NULL);
_tprintf( TEXT("The working dir is %s, and the error is %s/n"),
exedir,errmsg );
}
PyRun_SimpleString("exec(open(\"QuickWho.py\").read())");
Py_Finalize();
return 0;
}
Can anyone suggest what I might do to get Tkinter to load and run my exe?
Thanks,
Kevin
--
Kevin Walzer
Code by Kevin/Mobile Code by Kevin
http://www.codebykevin.com
http://www.wtmobilesoftware.com
More information about the Python-list
mailing list