2015-04-14 43 views
2

冷凍Tkinter的應用我已凍結「字體沒有定義」一TKinter的使用GUI的Python 3.4應用程式cx_Freeze和當我試圖運行它,我提出以下錯誤:在由cx_Freeze

NameError: name 'font' is not defined. 

當我從我的代碼中刪除了對字體的所有引用(例如,如果我沒有在代碼中的任何位置設置ttk標籤字體),它工作得很好,並且EXE運行良好。我檢查了由凍結腳本創建的library.zip壓縮文件,它包含tkinter目錄中的font.pyc文件。 這是文件看起來什麼我setup.py,如:

import cx_Freeze 
import sys 
import tkinter 

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

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

cx_Freeze.setup(
    name = "Number evolution", 
    options = {"build_exe": {"packages":["tkinter", "tkinter.font"], "includes": ["tkinter", "tkinter.font"]}}, 
    version = "0.01", 
    description = "Rocnikovka", 
    executables = executables 
    ) 

任何幫助表示讚賞。

更新:我也嘗試使用py2exe製作一個可執行文件,但最終獲得了相同的結果。看起來像tkinter的問題,而不是與cx_Freeze。

更新#2:我進口的Tkinter和TTK在這樣的腳本:

from tkinter import * 
from tkinter import ttk 

我在腳本中定義的幾個字體,像這樣的:

font_title = font.Font(family = "Exo 2", size = 20, weight = "bold") 

然後我使用字體參數ttk.Label對象。

在IDLE中作爲腳本運行時,這一切都很好。

+0

嘗試使用packages = []運行它,排除= [],cx-freeze發現tkinter與我一起使用python3.4 – timeyyy

+0

感謝您的提示。不過,我一直在收到同樣的錯誤。 –

+0

毫米沒有看到所有的代碼很難嘗試/多說。我猜這不是一個導入錯誤,因爲你有一個名稱錯誤而不是導入錯誤。除非你調用import tkinter.fontt,否則不會加載字體,代碼是否可以像腳本一樣運行? – timeyyy

回答

0

感謝雅頓,我能得到它的工作將明確字體子模塊導入:

from tkinter import font 

完美的作品好了。

+0

你能弄清楚它作爲腳本運行時沒有拋出錯誤的原因嗎?這種錯誤應該早得多。 – timeyyy

+0

好吧,我似乎有的唯一解釋就是你提到的那個 - cx_Freeze選擇要導入的子模塊,而Python自己做的是它所期望的。 –

+0

Python應該給出一個名稱錯誤.. – timeyyy