【发布时间】:2015-06-20 09:30:16
【问题描述】:
我已经使用 cx_Freeze 冻结了一个使用 Tkinter 的 GUI Python 3.4 应用程序,当我尝试运行它时,出现以下错误:
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 对象的 font 参数。
当在 IDLE 中作为脚本运行时,这一切都可以正常工作。
【问题讨论】:
-
尝试使用 packages = [], excludes = [] 运行它,cx-freeze 使用 python3.4 发现 tkinter 对我来说很好
-
感谢您的提示。不过,我一直收到同样的错误。
-
mm 没有看到所有代码很难尝试/说太多。我猜这不是导入错误,因为您有名称错误而不是导入错误。除非您调用 import tkinter.fontt,否则不会加载字体,代码作为脚本运行是否正常?
-
@Arden 是的,它作为脚本运行得很好,我设置的所有字体都正确渲染。我在原帖中添加了一些相关的代码sn-ps。当我从脚本中删除所有字体属性设置时,它也可以作为可执行文件运行。
-
您是否也在导入 tkinter.font?我得到 NameError: name font is not defined 如果我只是执行您在更新中放入的两个导入,可能是由于错误仅在编译后才出现