使用 cx_Freeze 创建可执行文件后不断收到“filedialog”错误

Posted

技术标签:

【中文标题】使用 cx_Freeze 创建可执行文件后不断收到“filedialog”错误【英文标题】:Keep getting a 'filedialog' error after creating executable with cx_Freeze 【发布时间】:2014-05-21 17:56:06 【问题描述】:

我正在尝试使用 python 脚本中的 cx_Freeze 创建可执行文件,但似乎 tkinter 模块的某些部分没有加载到可执行文件中。脚本文件包含导入语句:

from tkinter import *
from tkinter.filedialog import askopenfile, asksaveasfile
from tkinter.messagebox import *
import subprocess
import time

在我的脚本中,我有一些如下所示的代码:

f_outfile = filedialog.asksaveasfile(initialdir=r'c:\Program Files (x86)\LTC\LTSpiceIV')

当我从 IDLE shell 内部运行这个脚本时,它可以完美运行。我使用如下所示的 setup.py 文件创建了一个带有 cx_Freeze 的可执行文件:

from cx_Freeze import *

setup(name="voltage_substate_GUI",
  version="0.1",
  description="test",
  executables=[Executable("voltage_substate_GUI.pyw")],
  )

可执行文件的创建没有任何问题,但是当我运行可执行文件时,我在控制台窗口中收到错误提示

NameError: name 'filedialog is not defined'

但是,创建 GUI 的脚本的其余部分似乎工作正常 ---- 所有按钮都工作以及所有 Entry() 项目等。

对这个问题有什么想法吗?

谢谢!

【问题讨论】:

冻结时可以添加输出吗? 尝试:f_outfile = tkinter.filedialog.asksaveasfile(initialdir=r'c:\Program Files (x86)\LTC\LTSpiceIV') 这会让 python 知道filedialog 是 tinter 模块而不是变量。 【参考方案1】:

出于某种原因,我不得不在我冻结的脚本中显式导入“filedialog”和“messagebox”子模块。

import tkinter.filedialog as fdialog
import tkinter.messagebox as msgbox
import tkinter

虽然“标签”、“按钮”、“框架”、“条目”等运行良好,但谁知道必须以这种方式导入多少其他组件。希望这对某人有所帮助。

【讨论】:

以上是关于使用 cx_Freeze 创建可执行文件后不断收到“filedialog”错误的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 virtualenv 和 cx_Freeze 将 pygame 转换为可执行文件

使用 Python 3.2 和 cx_Freeze 创建 Windows 可执行文件

可执行文件 = 可执行文件 python 错误(尝试使用 cx_freeze 将 pygame 转换为可执行文件)

使用 python 3.7 PyQt5 和 cx_Freeze 创建可执行文件,但 DLL 无法加载

在 Windows 7 中使用 cx_freeze 创建的可执行文件在其他计算机上运行时崩溃并出现有关 PyQt5 的错误

cx_freeze - 可执行文件仍在本地目录中查找