Feelgood
И теперь понимаю что архитектура данного приложения слишком отвратительная, и на сейчас мне слишком мозолит глаза следующие вещи:
1. Почти все запросы к БД описал не в классе DB, а раскиданы по другим классам
2. Повторяемость некоторых участков кода, а именно:
Получился говнокод

С точки зрения компьютера код бывает двух видов: рабочий или нерабочий, с точки зрения программиста, трёх видов: качественный, говнокод и нерабочий. Если бы человек мог читать и понимать код со скоростью компьютера, такого понятия как говнокод не существовало бы. Говнокод это рабочий код, с которым трудно работать человеку, компьютеру всё равно.
У вас есть 4 функции:
#Сортировка по полю ID
def sort_records_by_id(self):
self.db.c.execute('SELECT * FROM finance ORDER BY ID')
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
#Сортировка по полю decription
def sort_records_by_description(self):
self.db.c.execute('SELECT * FROM finance ORDER BY description')
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
#Сортировка по полю costs
def sort_records_by_costs(self):
self.db.c.execute('SELECT * FROM finance ORDER BY costs')
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
#Сортировка по полю total
def sort_records_by_total(self):
self.db.c.execute('SELECT * FROM finance ORDER BY total')
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
Для каждого столбца вы написали собственную функцию, а если столбцов будет 20? а если у столбцов поменяются имена? Нужна одна функция
sort в классе
Main (хватит одной строки кода), которая будет получать имя нажатого заголовка, передавать его в функцию
sort_by класса
DB (две строки кода), получать обратно отсортированные данные и передавать их функции
view_records (четыре строки кода) для отображения в таблице. Столбцы таблицы нужно создавать в цикле, а имена столбцов нужно брать из базы или хотя бы из словаря или списка которые легко редактировать.
Если у вас не получится сделать это, могу показать код. Потом будет легче перенести всю работу с базой в класс
DB.