我已经使用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中作为脚本运行时,一切正常。
答案 0 :(得分:0)
感谢Arden,我能够让它工作添加一个明确的 font 子模块导入:
from tkinter import font
现在工作得很好。