Python 什么';下面的Tkinter程序有什么问题?

Python 什么';下面的Tkinter程序有什么问题?,python,tkinter,Python,Tkinter,我正在尝试执行我的第一个tkinter应用程序,但它给了我如下所示的错误。知道为什么同一类的函数看不到“frame”吗 Traceback (most recent call last): File "C:\Data\Personal\Python\Tkinter\GUI_ver1.py", line 25, in <module> myapp = App(root) File "C:\Data\Personal\Python\Tkinter\GUI_ver1.py", line 7

我正在尝试执行我的第一个tkinter应用程序,但它给了我如下所示的错误。知道为什么同一类的函数看不到“frame”吗

Traceback (most recent call last):
File "C:\Data\Personal\Python\Tkinter\GUI_ver1.py", line 25, in <module>
myapp = App(root)
File "C:\Data\Personal\Python\Tkinter\GUI_ver1.py", line 7, in __init__
self.createWidgets()
File "C:\Data\Personal\Python\Tkinter\GUI_ver1.py", line 10, in createWidgets
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
NameError: global name 'frame' is not defined
您在
\uuu init\uuu
中定义的
帧在任何其他方法中都不可见。如果希望能够访问它,则需要将其设置为
self
的属性

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})
无论何时使用变量,不要忘记包含
self.

def createWidgets(self):
    self.button = Button(self.frame, text="QUIT", fg="red", command=self.frame.quit)
    self.button.pack(side=LEFT)

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

这是解决NameError的最简单方法,但是您的代码仍然会因
AttributeError:App实例没有属性“master”错误而崩溃。发生这种情况的原因是,尽管您将
App
作为
Frame
的子类,但您从未为其调用
Frame
初始值设定项,因此在尝试调用Frame方法时,它会变得混乱。记得调用
\uuuu init\uuuu

def __init__(self, master=None):
    Frame.__init__(self, master)
    frame = Frame(master)
    frame.pack()
    self.createWidgets()

最后添加的代码应该可以正常工作,但它比需要的复杂一点。您的
App
实例是一个框架,但它本身也包含一个框架,
self.frame
。您可以通过删除第二个框架并直接向
self
添加小部件来简化这一过程

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})
您在
\uuu init\uuu
中定义的
帧在任何其他方法中都不可见。如果希望能够访问它,则需要将其设置为
self
的属性

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})
无论何时使用变量,不要忘记包含
self.

def createWidgets(self):
    self.button = Button(self.frame, text="QUIT", fg="red", command=self.frame.quit)
    self.button.pack(side=LEFT)

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

这是解决NameError的最简单方法,但是您的代码仍然会因
AttributeError:App实例没有属性“master”错误而崩溃。发生这种情况的原因是,尽管您将
App
作为
Frame
的子类,但您从未为其调用
Frame
初始值设定项,因此在尝试调用Frame方法时,它会变得混乱。记得调用
\uuuu init\uuuu

def __init__(self, master=None):
    Frame.__init__(self, master)
    frame = Frame(master)
    frame.pack()
    self.createWidgets()

最后添加的代码应该可以正常工作,但它比需要的复杂一点。您的
App
实例是一个框架,但它本身也包含一个框架,
self.frame
。您可以通过删除第二个框架并直接向
self
添加小部件来简化这一过程

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})
您在
\uuu init\uuu
中定义的
帧在任何其他方法中都不可见。如果希望能够访问它,则需要将其设置为
self
的属性

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})
无论何时使用变量,不要忘记包含
self.

def createWidgets(self):
    self.button = Button(self.frame, text="QUIT", fg="red", command=self.frame.quit)
    self.button.pack(side=LEFT)

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

这是解决NameError的最简单方法,但是您的代码仍然会因
AttributeError:App实例没有属性“master”错误而崩溃。发生这种情况的原因是,尽管您将
App
作为
Frame
的子类,但您从未为其调用
Frame
初始值设定项,因此在尝试调用Frame方法时,它会变得混乱。记得调用
\uuuu init\uuuu

def __init__(self, master=None):
    Frame.__init__(self, master)
    frame = Frame(master)
    frame.pack()
    self.createWidgets()

最后添加的代码应该可以正常工作,但它比需要的复杂一点。您的
App
实例是一个框架,但它本身也包含一个框架,
self.frame
。您可以通过删除第二个框架并直接向
self
添加小部件来简化这一过程

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})
您在
\uuu init\uuu
中定义的
帧在任何其他方法中都不可见。如果希望能够访问它,则需要将其设置为
self
的属性

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})
无论何时使用变量,不要忘记包含
self.

def createWidgets(self):
    self.button = Button(self.frame, text="QUIT", fg="red", command=self.frame.quit)
    self.button.pack(side=LEFT)

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

这是解决NameError的最简单方法,但是您的代码仍然会因
AttributeError:App实例没有属性“master”错误而崩溃。发生这种情况的原因是,尽管您将
App
作为
Frame
的子类,但您从未为其调用
Frame
初始值设定项,因此在尝试调用Frame方法时,它会变得混乱。记得调用
\uuuu init\uuuu

def __init__(self, master=None):
    Frame.__init__(self, master)
    frame = Frame(master)
    frame.pack()
    self.createWidgets()

最后添加的代码应该可以正常工作,但它比需要的复杂一点。您的
App
实例是一个框架,但它本身也包含一个框架,
self.frame
。您可以通过删除第二个框架并直接向
self
添加小部件来简化这一过程

def __init__(self, master=None):
    self.frame = Frame(master)
    self.frame.pack()
    self.createWidgets()
class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.button = Button(self, text="QUIT", fg="red", command=self.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(self, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

        self.hi_there.pack({"side": "right"})