Reputation: 1
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
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