2017-08-13 106 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