Tkinter故障 - 未定义名称框架

时间:2014-05-01 15:16:03

标签: python tkinter

import Tkinter

class Application(Frame):
    def __init__(self, master):
        Frame.__init__(self,master)
        self.grid()
        self.CreateWidgets()
    def CreateWidgets(self):
        self.LoginButton = Button(Self)
        self.LoginButton["text"] = "Login"
        self.LoginButton.grid()
        self.QUIT_Button = Button(self)
        self.QUIT_Button["text"] = "Quit"
        self.QUIT_Button["command"] = self.quit
        self.QUIT_Button["fg"] = "red"

root = Tk()
root.title("Login")
root.geometry("500x500")
app = Application(root)
root.mainloop()

这是我一直关注的youtube教程:https://www.youtube.com/watch?v=YCLTv6wh3jE&index=39&list=PLB0701884E5AE1B45

这是一直存在的错误:

Traceback (most recent call last):
  File "C:\Users\omer\Desktop\test.py", line 3, in <module>
    class Application(Frame):
NameError: name 'Frame' is not defined

我是Python的一个完整的菜鸟,我还在学习,所以任何帮助都会受到赞赏。

5 个答案:

答案 0 :(得分:1)

Frame TkButton都位于Tkinter命名空间中。因此,你必须使它们有资格让Python知道它们在哪里 1

import Tkinter

class Application(Tkinter.Frame):
...
        Tkinter.Frame.__init__(self, master)
...
        self.LoginButton = Tkinter.Button(self)
...
        self.QUIT_Button = Tkinter.Button(self)
...

root = Tkinter.Tk()

那,或者您可以直接导入名称:

from Tkinter import Frame, Tk, Button

1 如果您决定使用此第一个解决方案,最好像这样导入Tkinter

import Tkinter as tk

这样,代码就变成了这样:

import Tkinter as tk

class Application(Tkinter.Frame):
...
        tk.Frame.__init__(self, master)
...
        self.LoginButton = tk.Button(self)
...
        self.QUIT_Button = tk.Button(self)
...

root = tk.Tk()

更为简短。

答案 1 :(得分:0)

您必须导入Frame才能像使用它一样使用它。目前您已导入Tkinter,但这并不能让您以您使用它们的方式访问FrameButtonTk。但你要么做:

from Tkinter import Frame

from Tkinter import *(*表示&#39;所有&#39;在这种情况下,虽然仅使用几个模块时这不是必需的)

或者你可以保留你的import语句(import Tkinter)并改变你的代码:

class Application(Tkinter.Frame):

self.LoginButton = Tkinter.Button(Self)

但是,如果你这样做,我建议你这样做:

import Tkinter as tk

这样,您可以执行tk.Frametk.Button等等。

对于您要在Tkinter中使用的任何模块,您还需要以相同的方式导入它们。

你可以像这样进行单行导入:

from Tkinter import Tk, Frame, Button etc.

查看有关使用Python导入的此信息:http://effbot.org/zone/import-confusion.htm

答案 2 :(得分:0)

您需要导入FrameButtonTk

您可以从Tkinter明确导入所有这些内容:

from Tkinter import Frame, Button, Tk

或从Tkinternot a good thing to do)导入所有内容:

from Tkinter import *

或保持导入原样(import Tkinter)并从Frame命名空间获取ButtonTkTkinter,例如Frame

class Application(Tkinter.Frame):

更好的方法是以一种适用于python2和python3的通用方式导入tkinter:

try:
    # Python2
    import Tkinter as tk 
except ImportError:
    # Python3
    import tkinter as tk 

class Application(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self,master)
        self.grid()
        self.CreateWidgets()
    def CreateWidgets(self):
        self.LoginButton = tk.Button(self)
        self.LoginButton["text"] = "Login"
        self.LoginButton.grid()
        self.QUIT_Button = tk.Button(self)
        self.QUIT_Button["text"] = "Quit"
        self.QUIT_Button["command"] = self.quit
        self.QUIT_Button["fg"] = "red"

root = tk.Tk()
root.title("Login")
root.geometry("500x500")
app = Application(root)
root.mainloop()

此外,你有一个拼写错误,替换(观看Self):

self.LoginButton = Button(Self)

使用:

self.LoginButton = Button(self)

答案 3 :(得分:0)

晚了一点,但是对于有相同错误的人,请确保文件夹中没有tkinter.py文件。

答案 4 :(得分:0)

我也有同样的错误。我的问题是我有一个名为sudo make install 的文件,它覆盖了内置文件tkinter.py。因此,要解决此问题,我将文件名更改为其他名称。