'Font not defined' 在 Tkinter 应用程序中被 cx_Freeze 冻结
'Font not defined' in Tkinter application freezed by cx_Freeze
我用 cx_Freeze 冻结了一个使用 Tkinter 的 GUI Python 3.4 应用程序,当我尝试 运行 它时,出现以下错误:
NameError: name 'font' is not defined.
当我从我的代码中删除所有对字体的引用时(即,如果我没有在代码中的任何地方设置 ttk 标签字体),它工作正常并且 exe 运行s 很好。我检查了由冻结脚本创建的 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 中的脚本时,一切正常。
感谢 Arden,我能够通过添加显式 font 子模块导入来让它工作:
from tkinter import font
现在工作得很好。
我用 cx_Freeze 冻结了一个使用 Tkinter 的 GUI Python 3.4 应用程序,当我尝试 运行 它时,出现以下错误:
NameError: name 'font' is not defined.
当我从我的代码中删除所有对字体的引用时(即,如果我没有在代码中的任何地方设置 ttk 标签字体),它工作正常并且 exe 运行s 很好。我检查了由冻结脚本创建的 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 中的脚本时,一切正常。
感谢 Arden,我能够通过添加显式 font 子模块导入来让它工作:
from tkinter import font
现在工作得很好。