0

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()
4
  • Welcome to Stack Overflow. Please include the full traceback error. Commented Jun 22, 2022 at 7:09
  • 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 Commented Jun 22, 2022 at 7:19
  • Please include that in your post and not in the comments. Commented Jun 22, 2022 at 7:29
  • I did it please can you help me ? Commented Jun 22, 2022 at 7:36

1 Answer 1

1

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.