python中的“object has no attribute”错误

2024-05-03 09:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我用pythontkinter编写的代码。你知道吗

import tkinter as tk
from tkinter import *
from tkinter import ttk
root = Tk()

class UICreation():
    def __init__(self):
        print ("I m in __init__")
        tabControl = ttk.Notebook(root)
        tab1 = ttk.Frame(tabControl)
        tab2 = ttk.Frame(tabControl)

    def tabCreation(self):
        print ("I M in Tab Creation")
        self.tabControl.add(self.tab1 , text="select ")
        self.tabControl.add(self.tab2, text="Add ")
        self.tabControl.grid()

    def checkBox(self):
        print ("I M in checkBox")
        CheckBox1 = Checkbutton(self.tab1, text="Check1")
        CheckBox1.grid()

if __name__ == '__main__':
    ui = UICreation()
    ui.tabCreation()
    ui.checkBox()
    root.mainloop()

下面是错误

I m in init Traceback (most recent call last): I M in Tab Creation File "C:/Path/FileName.py", line 26, in ui.tabCreation() File "C:/Path/FileName.py", line 15, in tabCreation self.tabControl.add(self.tab1 , text="select ") AttributeError: 'UICreation' object has no attribute 'tabControl'

请帮我解决这个问题。我做错了什么,怎么解决


Tags: textinimportselfuiinittkinterdef
3条回答

你的__init__方法应该是:

def __init__(self):
    print ("I m in __init__")
    self.tabControl = ttk.Notebook(root)
    self.tab1 = ttk.Frame(self.tabControl)
    self.tab2 = ttk.Frame(self.tabControl)

您缺少每个属性的初始self.。你知道吗

我们必须将tabcontroltab1tab2设置为self,并将它们与self一起使用

下面是问题的答案:

   import tkinter as tk
    from tkinter import *
    from tkinter import ttk
    root = Tk()

    class UICreation():
        def __init__(self):
            print ("I m in __init__")
            self.tabControl = ttk.Notebook(root)
            self.tab1 = ttk.Frame(self.tabControl) #we must use self.tabControl
            self.tab2 = ttk.Frame(self.tabControl) #we must use self.tabControl

        def tabCreation(self):
            print ("I M in Tab Creation")
            self.tabControl.add(self.tab1 , text="select ")
            self.tabControl.add(self.tab2, text="Add ")
            self.tabControl.grid()

        def checkBox(self):
            print ("I M in checkBox")
            CheckBox1 = Checkbutton(self.tab1, text="Check1")
            CheckBox1.grid()

    if __name__ == '__main__':
        ui = UICreation()
        ui.tabCreation()
        ui.checkBox()
        root.mainloop()

UICreation实例化时从不接收根。同时修复self,使其成为实例属性。你知道吗

class UICreation():
    def __init__(self, root): #add root here
        print ("I m in __init__")
        self.tabControl = ttk.Notebook(root)
        self.tab1 = ttk.Frame(self.tabControl)
        self.tab2 = ttk.Frame(self.tabControl)

    def tabCreation(self):
        print ("I M in Tab Creation")
        self.tabControl.add(self.tab1 , text="select ")
        self.tabControl.add(self.tab2, text="Add ")
        self.tabControl.grid()

    def checkBox(self):
        print ("I M in checkBox")
        CheckBox1 = Checkbutton(self.tab1, text="Check1")
        CheckBox1.grid()

if __name__ == '__main__':
    ui = UICreation(root) # call with root
    ui.tabCreation()
    ui.checkBox()
    root.mainloop()

相关问题 更多 >