cx_freeze .exe没有打开tkinter窗口

时间:2017-08-13 20:54:03

标签: python cx-freeze win32gui

我是Python和Stack Overflow的新手,所以我在提问时并不是很有经验,但我一直在搜索这个网站超过两个小时,我仍然无法找到问题的解决方案。我已经下载了cx_freeze并创建了我的setup.py文件:

from cx_Freeze import setup, Executable
import sys
import os
import tkinter

base = None

if sys.platform == 'win32':
base = None


executables = [Executable("Bounce.py", base=base)]

packages = ["tkinter"]
options = {
    'build_exe': {

        'packages': ["os", "tkinter"],
    },

}

os.environ['TCL_LIBRARY'] = r'C:\Program Files\Python36\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Program Files\Python36\tcl\tk8.6'

includes = []
include_files = 
[r"C:\Users\peeps\AppData\Local\Programs\Python\Python36\DLLs\tcl86t.dll",

r"C:\Users\peeps\AppData\Local\Programs\Python\Python36\DLLs\tk86t.dll"]

setup(
    name = "Bounce",
    version = "1.0",
    description = "Test",
    options = options,
    executables = executables
)

我的实际python程序使用tkinter模块运行,我使用非tkinter python文件测试了我尝试使用的相同进程,该文件被完美地转换为.exe。当我使用cx_freeze运行此setup.py将Bounce.py转换为.exe时,.exe程序将打开并立即关闭。 Bounce.py文件没有打印到控制台,所以我不确定打开的窗口是用于控制台还是tkinter窗口(虽然窗口大小是控制台的窗口大小而不是tkinter窗口的大小指定为500乘400 px)因为它关闭得太快。有趣的是,当我更改setup.py文件的系统平台规范时:

if sys.platform == 'win32':
base = None

为:

if sys.platform == 'win32':
base = 'Win32GUI'
像某些指南说的那样,我实际收到一条错误消息: https://i.stack.imgur.com/yA7ZG.png

我不知道该错误消息的含义或原因。如果您对如何解决这个问题有任何想法,请告诉我。我觉得我已经搜索过每个论坛,我是第一个遇到这个问题的人:/

1 个答案:

答案 0 :(得分:0)

你有没有发现你刚刚创建include_files而不是使用它?!

我确信你必须在询问之前搜索大量信息。因为你知道应该添加tcl8.6.dlltk86t.dll以帮助tkinter运行(所以我不准备解释更多)

事实上,您只需将includesinclude_files放入build_exe

这是我的代码:

from cx_Freeze import setup, Executable
import sys
import os
import tkinter

base = None

if sys.platform == 'win32':
    base = "Win32GUI"


executables = [Executable("Bounce.py", base=base)]

packages = ["tkinter"]
options = {
    'build_exe': {
        'includes': ["os", "tkinter"],
        'include_files': [r"C:\Users\peeps\AppData\Local\Programs\Python\Python36\DLLs\tcl86t.dll",
                          r"C:\Users\peeps\AppData\Local\Programs\Python\Python36\DLLs\tk86t.dll"]
    },

}

os.environ['TCL_LIBRARY'] = r'C:\Program Files\Python36\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Program Files\Python36\tcl\tk8.6'


setup(
    name="Bounce",
    version="1.0",
    description="Test",
    options=options,
    executables=executables
)

最后,我建议您将packages更改为includes,其效果优于packages