Turns out the problem was that I accidentally created two different Treeview
widgets.
One Treeview was created and packed into the GUI (which is the one actually visible), and then a second salary_tree
was defined later in the code — this second one was used for all .insert()
calls.
So while the data was being inserted, it was going into a different Treeview instance that wasn’t displayed on screen.
Once I deleted the second (duplicate) salary_tree = ttk.Treeview(...)
line, and made sure all insertions went into the original Treeview, the rows displayed correctly.