Общение потоков между собой 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_())