Tkinter:AttributeError:'NoneType'对象没有属性'_root'

时间:2019-03-03 16:59:15

标签: python tkinter

我正在学习Tkinter,并且尝试使用OOP方法来设计简单的GUI。

我正在创建一个从tkinter.Frame开始使用的类,并且还实现了我的特定功能。

我试图在类的 init 函数之外定义tkinter.StringVar(),但出现标题中描述的错误。现在我知道应该在 init 方法中使用变量,并且可以正常使用,我只是想了解如果将其声明为类变量,为什么不起作用。

我了解tk.StringVar()需要具有tk.Tk()上下文才能运行。因此,这应该(并且确实确实)没有错误地进行编译:

root = tk.Tk()
str = tk.StringVar()
root.mainloop()

如果我这样写,它将给出上述错误:

class myClass(tk.Frame):
    def __init__(self, master):
        super(myClass, self).__init__(master)
        pass
    str=tk.StringVar()

root = tk.Tk()
inst = myClass(root)

因此,这是如果我尝试编写tk.StringVar()而不先创建'root = tk.Tk()'的情况。但是据我了解,tk.Tk()上下文是在创建“ inst”实例之前创建的,因此在解释器进入类并看到类变量“ str”时,它应该已经运行了tk.Tk()。显然我缺少了一些东西。在我尝试创建tk.StringVar()变量之前,请先向我解释事情发生的顺序以及为什么没有执行root.Tk()。谢谢。

编辑:str = tk.StringVar()行是类主体的一部分,因此在类定义期间执行-发生在实例化Tk()之前。 谢谢@jasonharper的回答。

0 个答案:

没有答案