from tkinter import * from tkinter import ttk import pandas as pd #Uses a counter to ensure unique iid for each row #keeps track of parent row iids #returns parent iids incrementing the counter each time def row_tracker(department_frame, iid_count): class Row_Tracker: def __init__(self, iid_count): self.iid_count = iid_count def departiid(self, department): self.iid_count += 1 setattr(self, department, 'D' + str(self.iid_count)) return getattr(self, department) row_tracker = Row_Tracker(iid_count) for rownum, row in department_frame.iterrows(): setattr(row_tracker, row['Department'], False) return row_tracker #add a row to the tree def treerow_add(row_tracker, tree, inputs): row_iid = inputs[3] department = inputs[0] department_iid = getattr(row_tracker, department) if not getattr(row_tracker, department): department_iid = row_tracker.departiid(department) tree.insert(parent='', index='end', iid=department_iid, text=department, values=('', '', '')) tree.insert(parent=department_iid, index='end', iid=row_iid, text='', values=(inputs[1], inputs[2], row_iid)) #add a row to the csv # return frame because variable for that frame needs to be updated def csvrow_add(file_path, frame, columns, inputs): df_addition = {} for i, column in enumerate(columns): df_addition[column] = inputs[i] frame = frame._append(df_addition, ignore_index = True) frame.to_csv(file_path, index=False) return frame #Delete employess from the tree and csv #If parent row has no remaining children, delete it row from the tree and reset tracking for it's iid def treerow_del(row_tracker, tree, iids): for iid in iids: parent_row_iid = tree.parent(iid) tree.delete(iid) if not tree.get_children(parent_row_iid): parent_row = tree.item(parent_row_iid) setattr(row_tracker, parent_row['text'], False) tree.delete(parent_row_iid) #Delete employee from data frame and csv def csvrow_del(file_path, frame, iids): for iid in iids: frame = frame.drop(frame[frame['cardID'] == iid].index) frame.to_csv(file_path, index=False) return frame