Python对象和树属性错误,我无法理解,树出现在错误的窗口中

Python对象和树属性错误,我无法理解,树出现在错误的窗口中,python,database,class,object,tree,Python,Database,Class,Object,Tree,我在tkinter中创建了两个窗口,并创建了自己的类。第一个窗口有一个调用另一个子窗口的按钮。第二个子窗口显示我制作的数据库中所有产品的列表。问题是我得到了一个AttributeError:“EnterProducts”对象没有属性“tree”。 树似乎显示在第一个窗口中,而不是第二个窗口中 from tkinter import * from tkinter import ttk import sqlite3 class Main(): def __init__(self,ma

我在tkinter中创建了两个窗口,并创建了自己的类。第一个窗口有一个调用另一个子窗口的按钮。第二个子窗口显示我制作的数据库中所有产品的列表。问题是我得到了一个AttributeError:“EnterProducts”对象没有属性“tree”。 树似乎显示在第一个窗口中,而不是第二个窗口中

from tkinter import *
from tkinter import ttk
import sqlite3


class Main():


    def __init__(self,master):
        self.master = master
        self.master.geometry('200x200+100+100')
        self.master.title('Menu')
        ttk.Style().configure("RB.TButton", background='blue', fg ='blue')

        self.MainLabel=Label(self.master,text='IT Sales',fg='Blue', font=("Rage Italic", 44)).grid (row = 0, column = 4)

        self.Products=ttk.Button(self.master,text="Products",width = 20, command=self.Products, style="RB.TButton").grid (row = 1, column = 4)

    def Products(self):
        root1=Toplevel(self.master)
        myGUI1=EnterProducts(root1)
        self.master.geometry('800x500+100+100')


    def finish(self):
        self.master.destroy()

    class EnterProducts():

    def __init__(self,master):

        db_name = 'sales.db'

        self.master=master
        self.master.geometry('400x200+100+200')
        self.master.title('Product Details')
        self.MainLabel = Label(self.master,text='All Products',fg='red').grid(row=0,column=0,columnspan=3,sticky=W)

        self.Products=ttk.Button(self.master,text="Products",width = 20, command="", style="RB.TButton").grid (row = 1, column = 4)
        self.viewing_records()


    def run_query (self, query, parameters = ()): 


        with sqlite3.connect(self.db_name) as conn:
            cursor = conn.cursor()
            query_result = cursor.execute (query, parameters)
            conn.commit()
        return query_result

    def viewing_records(self):
        tree=ttk.Treeview(height=10, columns=("Id ", "name", "Surname", "DOB"))
        tree.grid(row=100, column=0, columnspan=100)
        tree.heading('#0', text='ID', anchor=W)
        tree.heading("#1", text='name', anchor=W)
        tree.heading("#2", text='Surname', anchor=W)
        tree.heading("#3", text='DOB', anchor=W)

        records = self.tree.get_children()
        for element in records:
            self.tree.delete (element)
            query = 'SELECT * FROM Products '
            db_rows = self.run_query (query)
            for row in db_rows:
                self.tree.insert ('', 1, values=(row[0], row[1], row[2], row[3]))

    if __name__ == '__main__':
        root=Tk()
        main=Main(root)
        root.mainloop()
在EnterProducts.viewing_记录中,将创建一个树视图,然后将其绑定到局部变量树。几行之后,尝试使用实例属性self.tree访问该树,该属性引用不同的。不存在,变量大于作为局部变量创建的变量


如果希望树保留在EnterProducts实例中,则需要将其视为实例变量,即在创建时将其绑定到self.tree。否则,请移除自我保护。从self.tree将其视为局部变量。

很抱歉,如何将其绑定到self.treeUse self.tree=ttk.Treeviewheight=10,columns=Id、name、姓氏、DOB,然后在其他地方使用self.tree引用它。您可能还希望将Treeview的父窗口小部件指定为其构造函数的第一个参数。我倾向于在EnterProducts中创建树。\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,然后在查看记录中填充它。