Example #1
0
class TableVisualizer(tkinter.LabelFrame, TableEditListener):
    # is a widget that contains the 3 tables for the basic data

    def __init__(self, parent):
        # initializes the frame and its sub-frames
        tkinter.LabelFrame.__init__(self,
                                    parent,
                                    text="Expenditures and Balances")
        self.colors = None
        self.table_edit_listener: TableEditListener = None

        # create an initial balance table
        self.initialBalance = BalanceWidget(self, name='Initial Balance')
        self.initialBalance.add_listener(self)
        self.initialBalance.grid(row=0, padx=default_pad_x, pady=default_pad_y)

        # create an expenditure table
        self.expenditures: ExpenditureWidget = ExpenditureWidget(self)
        self.expenditures.add_listener(self)
        self.expenditures.grid(row=1, padx=default_pad_x, pady=default_pad_y)

        # create a final balances table
        self.currentBalance = BalanceWidget(self, name='Current Balance')
        self.currentBalance.add_listener(self)
        self.currentBalance.grid(row=2, padx=default_pad_x, pady=default_pad_y)

    def add_listener(self, listener: TableEditListener):
        self.table_edit_listener = listener

    def load_table_data(self, databases: {str: [[]]}):
        # links the table to a DatabaseManager and updates the table widgets accordingly
        self.initialBalance.set_balances(databases['initial balances'])
        self.currentBalance.set_balances(databases['current balances'])
        self.expenditures.set_expenditures(databases['expenditures'])

    def send_edit_to_database(self, table_name: str, row_index: int, values):
        self.table_edit_listener.send_edit_to_database(table_name, row_index,
                                                       values)

    def set_colors(self, color_dict: {str: str}):
        self.colors = color_dict
        self.update_colors()

    def update_colors(self):
        if self.colors is not None:
            self.config(bg=self.colors['bg_col'], fg=self.colors['text_col'])
            self.expenditures.set_colors(self.colors['table_col'])
            self.initialBalance.set_colors(self.colors['table_col'])
            self.currentBalance.set_colors(self.colors['table_col'])