使用 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 的错误