'字体未定义'在由cx_Freeze冻结的Tkinter应用程序中

时间:2015-04-14 16:47:15

标签: python tkinter cx-freeze

我已经使用cx_Freeze冻结了一个使用Tkinter的GUI Python 3.4应用程序,当我尝试运行它时,出现了以下错误:

NameError: name 'font' is not defined.

当我从我的代码中删除对字体的所有引用时(即,如果我没有在代码中的任何地方设置ttk Label字体),它工作得很好并且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 对象的 font 参数。

当在IDLE中作为脚本运行时,一切正常。

1 个答案:

答案 0 :(得分:0)

感谢Arden,我能够让它工作添加一个明确的 font 子模块导入:

from tkinter import font

现在工作得很好。