脚本在 IDLE 中工作,但 .py 文件不起作用
Posted
技术标签:
【中文标题】脚本在 IDLE 中工作,但 .py 文件不起作用【英文标题】:Script works in IDLE, but .py-file doesn't work 【发布时间】:2012-01-09 06:43:40 【问题描述】:我有一个 tkinter 脚本,它在 IDLE 中运行得很好。但是,当我在 Windows 资源管理器中双击 .py 文件时,控制台窗口会闪烁半秒然后退出。
我能够对控制台窗口进行丝网印刷。它说:
...etc.etc...
NameError: global name 'simpledialog' is not defined
simpledialog
是tkinter
中的一个模块,我在我的脚本中使用它。就像我写from tkinter import *
一样,没有必要明确写tkinter.simpledialog
。
它在 IDLE 中工作,为什么不作为 .py?
【问题讨论】:
如果你有多个版本的 python,你可能使用不同版本的 IDLE 和 .py,我遇到过一次,但猜测你遇到了什么。 我的只是一个猜测,因为我在 Windows 机器上没有直接经验(嗯,至少在 win98 之后没有),但它可能是你的 python 解释器使用的路径使用 IDLE 时会自动设置,而双击脚本时不会自动设置。 您是否尝试使用pythonw.exe
而不是python.exe
启动脚本?不确定这是否能解决问题,但仍然值得一试。
Serdalis:我只有一个版本的 Python,所以这不是问题。 @mac 我不能说我完全理解你在说什么,但我注意到另一个脚本 - 包含一个 Button,它是一个 tkinter 模块 - 可以在 Windows 资源管理器中工作! “路径问题”在我看来(?)有点过于笼统,仅影响 tkinter.simpledialog。
@hochl 我尝试了 pythonw.exe(通过重命名为 .pyw)。现在我根本看不到任何事情发生。猜猜这是同样的问题。
【参考方案1】:
IDLE 使用 Tkinter 作为其图形环境。您的代码可能依赖于 IDLE 本身导入的副作用。如果您在没有子进程的情况下使用 IDLE,则尤其如此。
simpledialog
模块在使用 from tkinter import *
时不会导入。
尝试将此添加到您的代码中:
import tkinter.simpledialog as simpledialog
【讨论】:
【参考方案2】:您是否更新了 PATH 环境变量以便找到您的 Python 可执行文件?您可以在此处找到有关如何操作的更多信息 - Using Python on Windows
但您基本上需要确保在提示符下键入以下命令时显示包含 python.exe 的文件夹(例如 C:\Python32):
echo %PATH%
【讨论】:
我刚刚更新了PATH环境变量,但仍然显示完全相同的NameError。 如何在代码中使用 simpledialog 模块?您是否尝试使用 simpledialog 模块中的 SimpleDialog 类? 我不这么认为,我是这样使用的:tempName=simpledialog.askstring("Name","请输入你的名字。")【参考方案3】:我的一个脚本使用 Tkinter 时遇到了完全相同的问题。 添加对 mainloop() 的调用解决了这个问题。 有关示例,请参阅本教程:[http://sebsauvage.net/python/gui/#import1
就我而言,在 init 函数中我有
def __init__(self,Width=400, Height=400):
# Create GUI window ------------------------------
win = Tk()
...
在 init 的最后我添加了:
win.mainloop()
现在只需运行文件即可。 希望这会有所帮助
【讨论】:
虽然调用 mainloop 的建议很有用,但它与这个特定问题无关。【参考方案4】:在我使用 python 的第一周,我也遇到了类似的麻烦。但是我依稀记得一个简单的早期测试脚本也有类似的问题,并认为当时的问题是# cmets。 所以我用我的 Tkinter 注入的 .py 脚本尝试了这一点。正如您所说,它在 IDLE 中运行良好,然后仅在 Windows 中单击时才闪烁。但是文件顶部有几行 # 注释行。
我把它们都拿出来了,现在它直接在 Windows 中流汗了。看看 .. 的#。
抱歉,似乎无法删除此帖子。现在文件工作#cmets 包括在内。不知道这是怎么回事。 ..
【讨论】:
【参考方案5】:我发现将可执行的 py 文件更改为 file.pyw
解决了这个问题。这告诉 python 使用 pythonw.exe 执行它,它在后台运行脚本而没有终端/控制台。
不知道为什么会这样,可能是以前的 python 安装中的一些搞砸了环境变量。
【讨论】:
【参考方案6】:将文件的扩展名更改为 pyw 而不是 py 可能会解决问题
【讨论】:
如果它确实解决了它,机制是什么?解释 .py 和 .pyw 文件扩展名之间的区别。以上是关于脚本在 IDLE 中工作,但 .py 文件不起作用的主要内容,如果未能解决你的问题,请参考以下文章
getInitialLink 不起作用,但 onLink 在 react-native-firebase v6 中工作
window.onunload() 在 Firefox 中不起作用?在IE中工作?
SAP HANA DB 连接在控制台应用程序中工作正常,但同样的事情在服务中不起作用
ALTER SESSION SET nls_date_format 在 APEX 中不起作用。但是在 SQL Developer 中工作