2017-08-13 131 views
1

我对Python和Stack Overflow都很陌生,所以我在提问时不是很有经验,但是我一直在搜索这个网站超过两个小时,而且我仍然找不到解决我的问题。我已经下载cx_freeze,并创造了我的setup.py文件:cx_freeze .exe没有打开tkinter窗口

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完美无瑕。当我运行这个setup.py使用cx_freeze将Bounce.py转换为.exe时,.exe程序打开并立即关闭。 Bounce.py文件没有向控制台输出任何内容,所以我不确定打开的窗口是用于控制台还是tkinter窗口(尽管窗口大小是控制台的窗口大小,而不是tkinter窗口的大小)由400 px指定为500),因为它关闭得太快。有趣的是,当我改变了setup.py文件的系统平台规范:

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

到:

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

像一些导游说,其实我得到一个错误信息: https://i.stack.imgur.com/yA7ZG.png

我不知道那个错误信息意味着什么或者它为什么发生。如果您对如何解决此问题有任何想法,请告诉我。我觉得我已经搜索了每个论坛,并且我是第一个遇到这个问题的人:/

回答

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 
) 

最后,我劝你改变packagesincludes的作品比packages

+0

就我而言,我想用'PyInstaller'但'cx_Freeze ' – WSY

+0

非常感谢你!问题是我有include_files并且包含变量,除非它们实际上未被使用。我复制了你的程序,它的工作完美无瑕(我不得不将include_files改为不同的DLL目录,但这是唯一的区别)。我不知道这是否值得一整个单独的帖子,但我想知道是否有一种方法来摆脱退出我的程序后弹出的错误消息:[链接] http://i.imgur .com/hGzT6eP.png这是当tkinter关闭时打印到控制台的错误信息,但它实际上并不是一个“错误” – MolotovPeep

+0

我不知道你把include_files改成了什么(因为它对我很好用机器)。您可以尝试在调整代码之前使用python终端而不是Anaconda运行您的脚本(我真的对Anaconda几乎没有任何用处)。 – WSY