【问题标题】:'Font not defined' in Tkinter application freezed by cx_Freeze由 cx_Freeze 冻结的 Tkinter 应用程序中的“字体未定义”
【发布时间】: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 如果我只是执行您在更新中放入的两个导入,可能是由于错误仅在编译后才出现

标签: python tkinter cx-freeze


【解决方案1】:

感谢 Arden,我能够通过添加显式 font 子模块导入使其正常工作:

from tkinter import font

现在效果很好。

【讨论】:

  • 你能找出它作为脚本运行时没有抛出错误的原因吗?这种错误应该更早出现。
  • 好吧,我似乎唯一的解释就是你提到的那个 - cx_Freeze 选择要导入的子模块,而 Python 本身会做人们期望它做的事情。
  • ……但它只是导入了整个 tkinter 模块。我不知道这是否有意义,但也许那些可执行程序,如 cx_Freeze 和 py2exe,取自... import * 意味着它们应该只导入模块的顶级内容并忽略子模块?
  • 你错了,试试这个,from tkinter import *, print(font),你会发现报错。
  • 我刚刚尝试过。我从 '...\\Python34\\lib\\tkinter\\font.py'> 得到
猜你喜欢
  • 2022-08-03
  • 2015-02-08
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多