PyQt, sqlite3. Как обновить список виджетов в главном окне?

Создал в Qt Designer MainWindow, в котором располагается QScrollArea.

Также имеется отдельный виджет, который помещается циклом внутри QScrollArea. На виджете расположены label и pushButton.

Есть рабочая директория, в которой находится пустая папка test и куча разных файлов, эти файлы сканируются и добавляются в бд.

При нажатии на кнопку файл в рабочей директории перемещается в папку test.

Вопрос примерно такой, как правильно поступить, что бы список фреймов выстраивался согласно обновленной информации из бд?

Вот код главного окна: main_window.py

Вот код виджета: frame.py

Вот скрипт запускающий программу:

from PyQt6 import QtWidgets
from mw import Ui_MainWindow
from fr import Ui_Form
from dataset import Data

import shutil
import sys


class Form(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.vbox = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)


class App(MainWindow, Form):
    def __init__(self):
        super().__init__()
        self.data = Data()
        self.stack_widget()

    def stack_widget(self):
        self.data.fill_folders()
        for row in self.data.get_data():
            form = Form()
            form.label.setText(row[1] + '\\' + row[0])
            form.pushButton.clicked.connect(lambda ch, form=form, row=row: self.change_dir(form, row))
            self.vbox.addWidget(form)

    def change_dir(self, form, row):
        shutil.move(self.data.path + '\\' + row[0], self.data.path + '\\test' + '\\' + row[0])
        form.label.setText(self.data.path + '\\test' + '\\' + row[0])  # look here


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = App()
    window.show()
    sys.exit(app.exec())

А вот код, который добавляет файлы в бд:

import sqlite3 as sq
import os


class Data:
    def __init__(self):
        self.path = 'D:\Work'
        self.three = os.walk(self.path)

    def fill_folders(self):
        self.base = sq.connect('fdb.db')
        self.cur = self.base.cursor()
        self.base.execute('DELETE FROM files')  # look here
        self.base.execute('CREATE TABLE IF NOT EXISTS files (name, status)')

        for root, dirs, files in self.three:
            if root == self.path:
                for file in files:
                    self.cur.execute('INSERT INTO files VALUES(?, ?)', (file, root))
            elif root == self.path + '\\test':
                for file in files:
                    self.cur.execute('INSERT INTO files VALUES(?, ?)', (file, root))
        self.base.commit()

    def get_data(self):
        self.dataset = self.cur.execute('SELECT * FROM files').fetchall()
        return self.dataset

Ответы (0 шт):