El progtwig tkinter comstack con cx_Freeze pero el progtwig no se iniciará

Estoy intentando crear un ejecutable siguiendo este tutorial

https://github.com/anthony-tuininga/cx_Freeze/tree/master/cx_Freeze/samples/Tkinter

Después de algunos ajustes, soy capaz de comstackr el proyecto, pero cuando hago clic en el archivo .exe, la animación de carga del mouse se activa pero nunca se carga nada. Esta pregunta ha sido formulada previamente pero nunca fue resuelta.

¿Dónde empezar a buscar en el código cuando su archivo .exe no funciona después de cx_freeze?

Mi archivo de aplicación

from tkinter import * from tkinter import messagebox root = Tk() root.title('Button') print("something") new = messagebox.showinfo("Title", "A tk messagebox") root.mainloop() 

mi setup.py

 import sys from cx_Freeze import setup, Executable base = None if sys.platform == 'win32': base = 'Win32GUI' executables = [ Executable('SimpleTkApp.py', base=base) ] setup(name='simple_Tkinter', version='0.1', description='Sample cx_Freeze Tkinter script', executables= [Executable("SimpleTkApp.py", base=base)]) 

También he estado agregando manualmente las bibliotecas TCL / TK

 set TK_LIBRARY=C:\...\tk8.6 etc 

Mi configuración: python 3.7, cx_Freeze 5.1.1

Cualquier ayuda sería muy apreciada, ni siquiera sé por dónde empezar.

Intenta modificar tu setup.py siguiente manera:

 import sys from cx_Freeze import setup, Executable import os PYTHON_INSTALL_DIR = os.path.dirname(sys.executable) os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6') os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6') include_files = [(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join('lib', 'tk86t.dll')), (os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), os.path.join('lib', 'tcl86t.dll'))] base = None if sys.platform == 'win32': base = 'Win32GUI' executables = [Executable('SimpleTkApp.py', base=base)] setup(name='simple_Tkinter', version='0.1', description='Sample cx_Freeze Tkinter script', options={'build_exe': {'include_files': include_files}}, executables=executables) 

Esto debería funcionar para la versión 5.1.1 de cx_Freeze (la versión actual). En esta versión, los módulos incluidos están en un subdirectorio lib del directorio de comstackción. Si usa 5.0.1 o una versión anterior, configure

 include_files = [os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll')] 

en lugar.

Consulte también Obtención de “ImportError: Error en la carga de DLL: no se pudo encontrar el módulo especificado” al usar cx_Freeze incluso con tcl86t.dll y tk86t.dll agregado y python tkinter exe creado con cx_Freeze para Windows no mostrará GUI

EDITAR:

Otro problema es que cx_Freeze tiene un error con Python 3.7 que aún no se ha corregido. Ver Cx_freeze estrellarse Python3.7.0 . Puede encontrar allí un enlace a una corrección de errores que debe aplicar manualmente (según el OP, esto solucionó el problema, vea los comentarios).

Después de probar un ejemplo aún más simple de hola mundo escribiendo en la consola (que también falló), me encontré con el culpable.

¿Cuál podría ser la razón del error fatal de Python: initfsencoding: no se puede cargar el códec del sistema de archivos?

Después de actualizar mi archivo freezer.py con el código que se encuentra aquí y usar el archivo setup.py proporcionado por jpeg, funcionó mi ejemplo de aplicación. Gracias a los dos por su rápida respuesta.

Tengo un setup.py de trabajo aquí. Tal vez puedas probar y ver si funciona después de usar la misma configuración. Básicamente, algunas veces después de comstackr, faltan los paquetes / paquetes de tk y tcl, por lo que debe incluirlos durante la configuración.

 import sys, os from cx_Freeze import setup, Executable includes = [] include_files = [r"C:\Users\user\AppData\Local\Programs\Python\Python36-32\DLLs\tcl86t.dll", r"C:\Users\user\AppData\Local\Programs\Python\Python36-32\DLLs\tk86t.dll"] base = 'Win32GUI' if sys.platform == 'win32' else None os.environ['TCL_LIBRARY'] = r'C:\Users\user\AppData\Local\Programs\Python\Python36-32\tcl\tcl8.6' os.environ['TK_LIBRARY'] = r'C:\Users\user\AppData\Local\Programs\Python\Python36-32\tcl\tk8.6' setup(name="simple_Tkinter", version="0.1", options={"build_exe":{"includes":[],"include_files":include_files}}, description="Sample cx_Freeze Tkinter script", executables=[Executable("SimpleTkApp.py",base=base)])