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