Общение потоков между собой PyQt5

Приложение которое пишу, основная его задача это считывать записывать данные с sql таблицы, все работает, но когда появилась надобность делать все эти процессы подряд не закрывая приложение, выяснилось что sql таблица добавляет новые данные только при перезапуске приложения. Есть вариант того что потоки между обновлением таблицы в процессе работы программы не обрабатывает(я могу ошибаться так как еще обучаюсь). Подскажите пожалуйста как сделать обновление таблицы во время работы программы. Пытался это сделать через Qtimer, засунуть в цикл, или опыта не хватила, или не туда копаю. Благодарю за любую помощь!

Вот код:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QThread, pyqtSignal
import sqlite3
import pandas as pd
import json
import sys, time
import numpy as np 
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt






database = './data/testDB.db'
textbase = './data/tags.txt'
DeviceBase = './data/DeviceList.db'
ExcelList = './data/alm_hardware.xlsx'
LocationDevice = './data/LocDevice.db'

# database = './data/testDB.db'
# textbase = './data/tags.txt'
# DeviceBase = './data/DeviceList.db'
# ExcelList = './data/alm_hardware.xlsx'




#подключение к базе данных
try:
    sqlite_connection = sqlite3.connect(DeviceBase)
    cursor = sqlite_connection.cursor()
    print("Подключен к SQLite")
except sqlite3.Error as error:
    print("Ошибка при работе с SQLite", error)

def insert_varible_into_table(Inventory, Serial, Model, Owner, Location, self): #добавление данных в SQLite
    sqlite_insert_with_param = """INSERT INTO DeviceList
                            (Inv, Serial, Model, Owner, Location)
                            VALUES (?, ?, ?, ?, ?);"""
    data_tuple = (Inventory, Serial, Model, Owner, Location)
    cursor.execute(sqlite_insert_with_param, data_tuple)
    sqlite_connection.commit()
    print("Переменные Python успешно вставлены в таблицу DeviceList")

def LoadLocDevice():
    cursor.execute("SELECT * FROM LocDevice")
    Data = cursor.fetchall()
    return Data


cursor.execute("SELECT * FROM RFID")
RFID_list = cursor.fetchall()
LocDevice = LoadLocDevice()

def insert_varible_into_table_RFID(Inventory, RFID): #добавление данных в SQLit
    if Inventory in str(RFID_list):
        cursor.execute("""DELETE FROM RFID WHERE inv = ?""", Inventory)
        sqlite_connection.commit()
    sqlite_insert_with_param = """INSERT INTO RFIDы
                            (Inv, RFID)
                            VALUES (?, ?);"""
    data_tuple = (Inventory, RFID)
    cursor.execute(sqlite_insert_with_param, data_tuple)
    sqlite_connection.commit()
    print("Переменные Python успешно вставлены в таблицу RFID")


test_rfid = ''

    
class ProgressBarThread(QThread):
    values_changed = pyqtSignal(object)               
    label_changed = pyqtSignal(str, str)
    combo_Box = pyqtSignal(object) 
    def __init__(self, mainwindow, parant=None):
        super().__init__()
        self.mainwindow = mainwindow
    def run(self):
        select_text = self.mainwindow.comboBox.currentText()
        item_text = self.mainwindow.comboBox.itemText(1)
        global res1
        current_rfid = ''
        while True:
            with open(textbase) as file:
                RFID_original = file.readlines()[-1]
                RFID = RFID_original.partition(';')[0]
                if RFID in str(RFID_list):
                    *res1, = filter(lambda x: x[1] == RFID, RFID_list)
                    res1 = np.array(res1)
                    for item in LocDevice:
                        if str(res1[0][0]) == str(item[0]):
                            if str(item[1]) == select_text:
                                self.text_changed(item_text)
                            elif str(item[1]) != str(select_text):
                                self.text_changed(select_text)
                            
                            
                else:
                    test_rfid = RFID
            self.msleep(1000)
                
    

    
    RFID_list = cursor.fetchall()
    LocDevice = LoadLocDevice()

    def text_changed(self, s):
        result = s
        conn = sqlite3.connect(DeviceBase)
        cursor = conn.cursor()
        box = "UPDATE LocDevice SET Status = ? WHERE Inventory = ?"
        Box = cursor.execute(box, (result, res1[0][0]))
        print(result)
        conn.commit()
        conn.close()
        return Box

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(260, 380, 251, 51))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 70, 131, 51))
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(310, 240, 111, 41))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.comboBox.setItemText(0, _translate("MainWindow", "Factory"))
        self.comboBox.setItemText(1, _translate("MainWindow", "Room"))
        self.label.setText(_translate("MainWindow", "TextLabel"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))




        self.pushButton.clicked.connect(self.launch_progress_bar_filling)
        self.ProgressbarThread_instance = ProgressBarThread(mainwindow=self)

    def launch_progress_bar_filling(self):
        self.pushButton.setEnabled(False)
        self.ProgressbarThread_instance.start()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

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