Tkinter Program Showing Error: _tkinter.TclError: wrong # args: should be ".!treeview heading column -option value..."

My Tkinter program was running perfectly, but all of a sudden, it started showing me the following error whenever I ran it:

File “C:\Users\allen\AppData\Local\Programs\Python\Python311\Lib\tkinter\ttk.py”, line 281, in _val_or_dict

res = tk.call(\*(args + options))

      ^^^^^^^^^^^^^^^^^^^^^^^^^^

_tkinter.TclError: wrong # args: should be “.!treeview heading column -option value…”

[Done] exited with code=1 in 3.961 seconds

See the Code below:

import tkinter as tk

from tkinter import ttk, messagebox

import ttkbootstrap as tb

import data_layer

class formMain:

def \__init_\_(self):

    self.data_manager = data_layer.DataLayer()

    self.build_control()

    self.refresh_tree()

    self.form_main.mainloop()



def refresh_tree(self):

    self.tree.delete(\*self.tree.get_children())

    #for record in \[\["Benjamin Allen", "20061021012", "Girei","Senior Prog Analyst","13/7","Male","30/10/1985","30/11/2006","25/11/2024","M.Sc Computer Science"\], \["Mohammed Bello", "20111021012", "Yola South","Senior Prog Analyst","13/7","Male","15/11/1986","30/11/2006","25/11/2024","M.Sc Computer Science"\], \["Pallavi Vadia", "20061021012", "Numan","Senior Prog Analyst","13/7","Male","30/10/1985","30/11/2006","25/11/2024","M.Sc Computer Science"\]\]: 

    

    for record in self.data_manager.get_data():                                                         

    

         self.tree.insert("", tk.END, values=record)   



def delete_click(self):

     self.delete_record()

     self.refresh_tree()



def edit_click(self):

     print("edit")

     self.refresh_tree()



def save_click(self):

     self.save_record()

     self.refresh_tree()

     

def get_data_from_controls(self):

    return \[self.entry_name.get(),

            self.entry_psn.get(),

            self.entry_lga.get(),

            self.entry_designation.get(),

            self.entry_gl.get(),

            self.radio_gender.get(),

            self.entry_dob.get(),

            self.entry_date_of_first_app.get(),

            self.entry_date_of_pre_app.get(),

            self.entry_qualification.get(),

            self.entry_remarks.get()\]



def save_record(self):

     self.data_manager.add_record(self.get_data_from_controls())



def delete_record(self):

     selection = self.tree.focus()

     if not selection:

          messagebox.showerror(message="No Record Selected. Please Select and try again")

          return

     row_index = self.tree.index(selection)

     self.data_manager.delete_record(row_index+1)



def theme_selected(self, event):

     self.style.theme_use(self.combo_theme.get())



def update_controls(self, parent):

     

     for child in self.walk_widgets(parent):

          if isinstance(child,(tk.Frame, ttk.Treeview)):

               child.grid_configure(padx=15, pady=15, sticky="w")

          else:

               child.grid_configure(padx=5, pady=5, sticky="w")



def walk_widgets(self, parent):

    widget =\[\]

    for child in parent.winfo_children():

        widget.append(child)

        widget.extend(self.walk_widgets(child))

    return widget

         




def build_control(self):

    self.form_main = tb.Window(themename="superhero")

    self.style = tb.Style()

    self.form_main.title("Adamawa State Bureau of Statistics Staff Manager")



    #CREATE CONTROLS

    frame_top_left = tk.Frame(self.form_main)

    button_edit = tk.Button(frame_top_left, text="Edit", width=10, command=self.edit_click)

    button_delete = tk.Button(frame_top_left, text="Delete", width=10, command=self.delete_click)



    #THEMES

    themes = \["cosmo","flatly","sandstone","pulse","united","journal","darkly","superhero"\]

    frame_top_right = tk.Frame(self.form_main)

    self.combo_theme = ttk.Combobox(frame_top_right, values=themes) 

    self.combo_theme.set(self.style.theme.name)

    self.combo_theme.bind("<<ComboboxSelected>>",self.theme_selected)




    #column_ids = \["Full Name","PSN", "LGA","Designation","GL","Gender","DOB","Date of 1st App","Date of Pre App","Qualification"\]



    column_ids = self.data_manager.get_header()

    self.tree = ttk.Treeview(self.form_main,columns=column_ids,show="headings")

    for id in column_ids:

            self.tree.heading(column = id, text = id, anchor = "e")



    #DATA CONTROLS

    frame_centre_left = tk.Frame(self.form_main,relief="solid",borderwidth=1)

    self.label_name = tk.Label(frame_centre_left,text="Name")

    self.entry_name = tk.Entry(frame_centre_left)

    self.label_psn = tk.Label(frame_centre_left,text="PSN")

    self.entry_psn = tk.Entry(frame_centre_left)  

    self.label_lga = tk.Label(frame_centre_left,text="LGA")

    self.entry_lga = tk.Entry(frame_centre_left)

    self.label_designation = tk.Label(frame_centre_left,text="Designation")

    self.entry_designation = tk.Entry(frame_centre_left)

    self.label_gl = tk.Label(frame_centre_left,text="GL")

    self.entry_gl = tk.Entry(frame_centre_left)

    self.radio_gender = tk.StringVar(value="Male") 

    radio_male = tk.Radiobutton(frame_centre_left,text="Male",value="Male",variable=self.radio_gender)

    radio_female = tk.Radiobutton(frame_centre_left,text="Female",value="Female",variable=self.radio_gender)

    self.label_dob = tk.Label(frame_centre_left,text="DOB")

    self.entry_dob = tk.Entry(frame_centre_left)

    self.label_date_of_first_app = tk.Label(frame_centre_left,text="Date of First App")

    self.entry_date_of_first_app = tk.Entry(frame_centre_left)

    self.label_date_of_pre_app = tk.Label(frame_centre_left,text="Date of Pre App")

    self.entry_date_of_pre_app = tk.Entry(frame_centre_left)

    self.label_qualification = tk.Label(frame_centre_left,text="Qualification")

    self.entry_qualification = tk.Entry(frame_centre_left)

    self.label_remarks = tk.Label(frame_centre_left,text="Remarks")

    self.entry_remarks = tk.Entry(frame_centre_left)



    self.button_add = tb.Button(frame_centre_left,text="Add",command=self.save_click,width=10,bootstyle="light") 



    #POSITION CONTROLS

    frame_top_left.grid(row=1, column=1)

    button_edit.grid(row=1, column=1)

    button_delete.grid(row=1, column=2)



    self.combo_theme.grid(row=1, column=1)



    self.tree.grid(row=2, column=2)



    frame_centre_left.grid(row=2,column=1)

    self.label_name.grid(row=2,column=1)

    self.entry_name.grid(row=2,column=2)

    self.label_psn.grid(row=3,column=1)

    self.entry_psn.grid(row=3,column=2)  

    self.label_lga.grid(row=4,column=1)

    self.entry_lga.grid(row=4,column=2)

    self.label_designation.grid(row=5,column=1)

    self.entry_designation.grid(row=5,column=2)

    self.label_gl.grid(row=6,column=1)

    self.entry_gl.grid(row=6,column=2)

    self.radio_gender = tk.StringVar(value="Male") 

    radio_male.grid(row=7,column=1)

    radio_female.grid(row=7,column=2)

    self.label_dob.grid(row=8,column=1)

    self.entry_dob.grid(row=8,column=2)

    self.label_date_of_first_app.grid(row=9,column=1)

    self.entry_date_of_first_app.grid(row=9,column=2)

    self.label_date_of_pre_app.grid(row=10,column=1)

    self.entry_date_of_pre_app.grid(row=10,column=2)

    self.label_qualification.grid(row=11,column=1)

    self.entry_qualification.grid(row=11,column=2)

    self.label_remarks.grid(row=12,column=1)

    self.entry_remarks.grid(row=12,column=2)

    self.button_add.grid(row=13, column=1)



    self.update_controls(self.form_main)

    frame_top_right.grid(row=1, column=2, sticky="w")

form = formMain()

1 Like

Please edit your post to improve the readability of the code. When you enter a code block into a forum post, please precede it with three backticks to make it easier to read.

You can also use the “preformatted text” tool in the editor (</>) to add the backticks.

See this post to find the backtick on your keyboard.
Note: Backticks (`) are not single quotes (').

1 Like