【问题标题】:python - why does Tkinter work only in interactive environments? [duplicate]python - 为什么 Tkinter 只在交互式环境中工作? [复制]
【发布时间】:2020-02-20 21:16:57
【问题描述】:

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

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

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

我的屏幕上正确出现了一个新窗口。

然后我尝试做同样的事情来创建一个 .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”更改为其他名称,例如“my_example.py”
  • 我怀疑您正在导入自己的 py 文件。重命名文件。 “你好”被打印两次,一次是在文件运行时,一次是在导入文件时,因此 print-ception :D
  • 非常感谢。这就是问题所在。重命名文件并重新运行 python 按预期工作。非常感谢。 :)

标签: python tkinter python-3.7


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2022-08-15
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多