Abdullah Kaya
Abdullah Kaya

Reputation: 1

Cannot create 2 treeview in same window/ Tkinter

when I tried to create 2 treeview inside same window in tkinter , i got an error like this

File "D:\Anaconda Navigator\lib\tkinter\ttk.py", line 1240, in column return _val_or_dict(self.tk, kw, self._w, "column", column) File "D:\Anaconda Navigator\lib\tkinter\ttk.py", line 298, in _val_or_dict res = tk.call(*(args + options)) _tkinter.TclError: Invalid column index PID.

The reason i got this error is that because I have created another treeview above and the one that i am creating later has different column names and spyder cannot differentiate them. Thanks for your help.

The error i got is this:

my code is

class swindow:

def __init__(self, window):

    #Settings For Supplier Window
    self.window = window
    self.window.title('TEDARİKÇİLER')
    self.window.state('zoomed')
    self.window.protocol("WM_DELETE_WINDOW", on_closing)        
    
    #Frames for treeview and data entry
    self.view = Frame(self.window)
    self.viewr  =Frame(self.window,bg = 'red')
    self.entry= Frame(self.window)
    self.rentry = Frame(self.window)
    
    #Labels
    self.sheading = Label(self.entry , text = 'Tedarikçi Girişi', font = ('Verdana',17,'bold'),fg = 'blue')
    self.sname = Label(self.entry,text = 'Tedarikçi Adı: ', font=('Verdana',12),width =18)
    self.sphone = Label(self.entry, text = 'Tedarikçi Tel: ', font=('Verdana',12),width = 18)
    self.smail= Label(self.entry, text = 'Tedarikçi Mail Adresi: ', font=('Verdana',12),width=18)
    self.sofficer = Label(self.entry, text = 'İlgili Adı: ',font = ('Verdana',12), width =18)
    self.headingr = Label(self.rentry,text = 'Tedarik Edilmiş Parça Girişi',font = ('Verdana',17,'bold'),fg = 'red')
    self.snamer = Label(self.rentry,text = 'Tedarikçi Adı: ',font = ('Verdana',12), width =18)
    self.pnamer = Label(self.rentry,text = 'Parça Adı: ',font = ('Verdana',12), width =18)
    self.pbrandr = Label(self.rentry,text = 'Parça Markası: ',font = ('Verdana',12), width =18)
    self.quantity = Label(self.rentry,text = 'Parça Adet: ' ,font = ('Verdana',12), width =18)
    self.pricer  = Label(self.rentry,text = 'Parça Fiyat: ',font = ('Verdana',12), width =18)
    
    #EntryBoxes
    self.nameentry = Entry(self.entry , width=20 , font = ('Verdana',12))
    self.phoneentry = Entry(self.entry , width=20 , font = ('Verdana',12))
    self.mailentry = Entry(self.entry , width=20 , font = ('Verdana',12))
    self.officerentry = Entry(self.entry , width=20 , font = ('Verdana',12))

    
    #ComboBoxes and EntryBoxes for Part-Supplier Relationship
    self.scombo = ttk.Combobox(self.rentry, width = 20, font = ('Verdana',12))
    self.pcombo = ttk.Combobox(self.rentry, width = 20, font = ('Verdana',12))
    self.bcombo = ttk.Combobox(self.rentry, width = 20, font = ('Verdana',12))
    self.quantityentry = Entry(self.rentry,width = 22,font=('Verdana',12))
    self.priceentry = Entry(self.rentry,width = 22,font=('Verdana',12))
    
    #Buttons
    self.backbutton = Button(self.window,text='Ana Pencere',font=('Verdana',14), command = self.goback)
    self.add = Button(self.entry , text = 'Tedarikçi Ekle',font= ('Verdana',12), bg='chartreuse1',command = self.add_supplier)
    self.update = Button(self.entry , text = 'Tedarikçi Güncelle', font= ('Verdana',12),bg='yellow',command = self.update_supplier)
    self.delete = Button(self.entry ,text= 'Tedarikçi Sil', font= ('Verdana', 12),bg='red',command = self.delete_supplier)
    self.addr = Button(self.rentry,text = 'Tedarikçi-Parça Ekle',font= ('Verdana',12), bg='chartreuse1',command = self.addr)
    self.updater = Button(self.rentry,text = 'Tedarikçi-Parça Güncelle', font= ('Verdana',12),bg='yellow',command = self.updater)
    
    
    #ScrollBar For Treeview
    self.scroll = Scrollbar(self.view)
    self.yscrollr = Scrollbar(self.viewr)
    
    #Treeview for Supplier Table
    self.tree = ttk.Treeview(self.view, yscrollcommand= self.scroll.set, selectmode = 'browse')
    self.tree['columns'] = ('SID','SuppName', 'PartName','PartNo','Part Price')
    self.headings=['sid','Tedarikçi Adı','Parça Adı','Parça No','Parça Fiyat']
    self.tree.column('#0', width= 0, stretch= NO)
    for i,j in zip(self.tree['columns'], self.headings):
        self.tree.column(i,anchor= CENTER,width= 150, minwidth= 150)
        self.tree.heading(i,text = j, anchor = CENTER)
    self.tree['displaycolumns'] = ('SuppName', 'PartName','PartNo','Part Price')
    
    #Treeview for Supplier-Part Relation
    self.treer = ttk.Treeview(self.viewr , yscrollcommand = self.yscrollr.set, selectmode = 'browse')
    self.treer['columns'] = ('SID','PID','Sname','Pname','Pcategory','Squantity','Sdate','Sprice','Pbrand','Ptype')
    self.headingsr = ['sid','pid','Tedarikçi Adı','Parça Adı','Parça Kategorisi','Tedarik Edilen Adet','Tedarik Tarihi','Tedarik Fiyatı','Parça Markası','Parça Hammaddesi']
    self.treer.column('#0', width = 0, stretch = NO)
    
    for i,j in zip(self.treer['columns'],self.headingsr):
        self.tree.column(i,anchor= CENTER,width= 150, minwidth= 150)
        self.tree.heading(i,text = j, anchor = CENTER)
    
    self.treer['displaycolumns'] = ('Sname','Pname','Pcategory','Pbrand','Ptype','Squantity','Sdate','Sprice')
    
    #Binding Treeview to ScrollBar
    self.tree.bind('<Double-1>', self.selector)
    self.scroll.config(command = self.tree.yview)
    
    #Placement of Frames
    self.entry.place_configure(x=45,y=30,height= 293, width=475)
    self.view.place_configure(width=950,height =256,x=530,y=55)
    self.viewr.place_configure(width =950,height=350,x = 530, y=362)
    self.rentry.place(x=45 , y = 350, height = 410, width =475)
    
    #Placement of Labels
    self.sheading.pack(fill = X)
    self.sname.place(x=15 , y=45)
    self.sphone.place(x=15 , y=100)
    self.smail.place(x=15 , y=155)
    self.sofficer.place(x=15 , y=210)
    self.headingr.place(x= 49,y=0)
    self.snamer.place(x= 5,y=45)
    self.pnamer.place(x = 5, y = 100)
    self.pbrandr.place(x = 5, y = 155)
    self.quantity.place(x = 5, y = 210)
    self.pricer.place(x = 5, y = 265)

    #Placement of ComboBoxes
    self.scombo.place(x =200 , y =45 )
    self.pcombo.place(x =200 , y =100 )
    self.bcombo.place(x = 200, y = 155)        

    #Placement of EntryBoxes
    self.nameentry.place(x=210, y=45)
    self.phoneentry.place(x=210 , y=100)
    self.mailentry.place(x=210 , y=155)
    self.officerentry.place(x=210, y=210)
    self.quantityentry.place(x =200 , y =210 )
    self.priceentry.place(x = 200, y = 265)

    
    #Placement of Buttons
    self.backbutton.place(x=650,y= 0)
    self.add.place(x=15,y=250)
    self.update.place(x=150,y=250)
    self.delete.place(x=325,y=250)
    self.addr.place(x = 0,y = 305 )
    self.updater.place(x = 210 ,y =305 )
    
    #Placement of Treeview
    self.tree.place(x=0, y=40,height =700, width=933)
    self.treer.place(x=0,y=40,height = 700,width=933)
    
    #Placement of ScrollBar
    self.scroll.pack(side = RIGHT, fill = Y)
    
    self.window.mainloop()

Upvotes: 0

Views: 141

Answers (1)

acw1668
acw1668

Reputation: 47193

You used self.tree in the for loop:

    for i,j in zip(self.treer['columns'],self.headingsr):
        self.tree.column(i,anchor= CENTER,width= 150, minwidth= 150)
        self.tree.heading(i,text = j, anchor = CENTER)

But it should be self.treer instead:

    for i,j in zip(self.treer['columns'],self.headingsr):
        # should use self.treer instead of self.tree
        self.treer.column(i,anchor= CENTER,width= 150, minwidth= 150)
        self.treer.heading(i,text = j, anchor = CENTER)

Suggest to go through your code and make sure you use the correct instance variable: self.tree or self.treer.

Upvotes: 1

Related Questions