python - 为什么 Tkinter 只能在交互式环境中工作?

python - why does Tkinter work only in interactive environments?

我刚开始尝试使用 Tkinter,由于我注意到的一些特殊性,我有一些问题。

首先,我尝试使用交互式 python 环境并输入以下内容:

>>> import tkinter
>>> win = tkinter.Tk()

一个新的 window 正确地出现在我的屏幕上。

然后我尝试创建一个 .py 脚本:

import tkinter
win = tkinter.Tk()

这是我得到的错误

Traceback (most recent call last):
  File "tkinter.py", line 1, in <module>
    import tkinter
  File "/home/***/tests/tkinter.py", line 2, in <module>
    win = tkinter.Tk()
AttributeError: module 'tkinter' has no attribute 'Tk'

我无法解释:为什么 tkinter 模块存在并且在交互式环境中工作正常,但如果我将代码放入脚本中它会失败?顺便说一句,我 运行 使用命令 python3.7 tkinter.py 的脚本,我使用命令 python3.7 来 运行 交互式 python shell.

之后我尝试了一个更简单的程序(在同一个脚本中,但是我删除了创建的 pycache 文件夹:我必须承认我在这里写的时候忽略了它的目的) :

import tkinter

print("Hello")

打印 hello 两次。所以我删除了 import tkinter 行。它只打印一次 Hello

我真的无法解释这种奇怪的行为。我正在寻找可以的人。

谢谢。

根据异常详细信息,当 "tkinter.py" 中的 运行 import tkinter 行时,您正在将自己的 "tkinter.py" 文件作为模块而不是 Tkinter 库导入。 Tk() 未在您的 "tkinter.py" 文件中定义,调用它会导致 AttributeError。同样的事情发生在第二个例子 print("Hello") - 它运行两次:第一次,当你导入你的文件时,第二次,当你在这之后调用 print("Hello") 时。

将您的文件从 "tkinter.py" 重命名为其他名称,例如"my_example.py" 解决这个问题。