【问题标题】:Python NameError: name 'frame' is not defined (Tkinter)Python NameError:未定义名称“框架”(Tkinter)
【发布时间】:2014-04-19 23:48:39
【问题描述】:

代码如下:

#!/usr/bin/python
from tkinter import *

class App:
    def _init_(self, master):

        frame = Frame(master)
        frame.pack()

    self.lbl = Label(frame, text = "Hello World!\n")
    self.lbl.pack()

    self.button = Button(frame, text="Quit", fg="red", command=frame.quit)
    self.button.pack(side=LEFT)

    self.hi_there = Button(frame, text="Say hi!", command=self.say_hi)
    self.hi_there.pack(side=LEFT)

    def say_hi(self):
        print("Hello!")

    root = Tk()
    root.title("Hai")
    root.geometry("200x85")
    app = App(root)
    root.mainloop()

在这里,错误:

Traceback (most recent call last):
  File "F:/HTML/HTMLtests/python/hellotkinter2.py", line 4, in <module>
    class App:
  File "F:/HTML/HTMLtests/python/hellotkinter2.py", line 10, in App
    self.lbl = Label(frame, text = "Hello World!\n")
NameError: name 'frame' is not defined

找不到出错的地方!感谢任何帮助!

【问题讨论】:

    标签: python tkinter nameerror


    【解决方案1】:

    这里有点不对:

    1. __init__,不是_init_
    2. 您应该了解类成员变量(未在__init__ 中设置)和实例成员变量(在__init__ 中设置)之间的区别。你使用 self 完全错误。
    3. 您的类似乎递归地实例化了自己??
    4. 您应该分离关注点,而不是让一个巨大的无形类来完成整个工作。

    您的错误是由于 2 造成的,但在您查看 1 和 3 之前不会完全解决。

    【讨论】:

      【解决方案2】:

      缩进和大写随着一些下划线而关闭。以下工作。

      #!/usr/bin/python
      from Tkinter import *
      
      class App(object):
          def __init__(self, master):
              frame = Frame(master)
              frame.pack()
      
              self.lbl = Label(frame, text = "Hello World!\n")
              self.lbl.pack()
      
              self.button = Button(frame, text="Quit", fg="red", command=frame.quit)
              self.button.pack(side=LEFT)
      
              self.hi_there = Button(frame, text="Say hi!", command=self.say_hi)
              self.hi_there.pack(side=LEFT)
      
          def say_hi(self):
              print("Hello!")
      
      root = Tk()
      root.title("Hai")
      root.geometry("200x85")
      app = App(root)
      root.mainloop()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 2020-09-04
        相关资源
        最近更新 更多