Tkinter,“module” 对象没有属性“Frame”。

3
我用Tkinter Python写了一个Hello World应用程序,但是我收到了以下消息:'module'对象没有属性'Frame'。
import _tkinter as tk

这里有一个错误

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.pack()
        self.createWidgets()
    def createWidgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.QUIT = tk.Button(self, text="QUIT", fg="red",
                                        command=root.destroy)
        self.QUIT.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = tk.Tk()
app = Application(master=root)
app.mainloop()

为什么会发生这种情况?

我很好奇。你是怎么得出 import _tkinter as tk 是正确的呢?你在哪里读到的? - Robᵩ
3个回答

10

不要将你的文件命名为tkinter.py,必要时请更名。


3
那就是我的代码没有运行的原因...非常感谢... - Tajdar Khan Afridi
当然,如果目录中的任何文件(而不仅仅是正在执行的文件)命名为tkinter.py,那么这个“错误”也会影响到它们。 - Josh O'Brien

3

在处理Python 3.x版本的IT技术问题时,应该使用Tkinter(如果是Python 2.x则应使用tkinter),不要使用_tkinter

import Tkinter as tk

根据Tkinter模块文档:

... Tk接口位于名为_tkinter的二进制模块中。该模块包含与Tk的低级接口,并且不应直接由应用程序员使用。


2
这里的解决方案是使用与相关Python版本相对应的正确语法。
Tkinter >> Python 2.x
tkinter >> Python 3.x
尽管如此,我因为将文件命名为 tkinter.py 而出现了错误,并且收到了以下错误提示:
module 'tkinter' has no attribute 'Frame'

一旦我将文件重命名为完全不同的名称,例如在我的情况下我选择了tk-testing.py,如果使用上面正确的命名规则,在Python 2.x和Python 3.x中都没有问题。

Python 2.x

import Tkinter as tk

Python 3.x

import Tkinter as tk

2
感谢您指出文件本身不应该是“tkinter.py” 一旦我将文件重命名为完全不同的名称,例如我选择了tk-testing.py,问题就解决了 这解决了我的问题。 - longboardnode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接