Как использовать сигнал и слот в потоке? - PullRequest
0 голосов
/ 29 сентября 2019

Я написал такую ​​строку кода с помощью pyqt5, когда полученные данные превышают пороговое значение, появляется интерфейс тревоги, эти данные всегда принимаются, поэтому их необходимо оценивать постоянно.Для этого я поместил код, который получает данные и определение пороговых значений в поток.Однако теперь я не знаю, как реализовать соответствующий сигнал и функцию слота для отображения интерфейса оповещения, когда данные оценки превышают порог. Как я могу это сделать? Это мой код

class Control_system(QMainWindow, Ui_Control_system):
    skipQueue = multiprocessing.Queue()
    add_data_list = []
    skip_button = pyqtSignal(object)

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.add_data_list = ""
        self.popup_window_thread = PopupWindow()
        self.p2 = multiprocessing.Process(target=Control_system.skip, args=(self.skipQueue,))
        self.p2.start()
    @staticmethod
    def skip(self):
        while True:
            sql = "SELECT * FROM data WHERE 时间>=now()-interval 5 second"
            result = Mysqldb.select_all(sql, [])
            result_list = [x for x in result]
            for i in range(len(result_list)):
                term = list(result_list[i].values())
                if eval(term[4]) > eval(result4['火焰值']):
                    Control_system.add_data_list.append(['新区101车间', '2号机', '火焰', '超过阈值'])
                    Control_system.skip_button.connect(self.jump_to_alert)

                else:
                    pass

            time.sleep(2)
    @pyqtSlot()
    def jump_to_alert(self):
        try:
            self.popup_window_thread.popup.disconnect()
        except:
            pass
        self.popup_window_thread.popup.connect(self.goAlert)
        self.popup_window_thread.start()
    @pyqtSlot(str, str, str, str)
    def goAlert(self, room, machine, project,description):                                                  

        alert = Show_Text(room, machine, project,description)
        alert.closeSignal.connect(self.add_line)
        alert.exec_()

class PopupWindow(QThread): 

    popup = pyqtSignal(str,str,str,str)

    def __init__(self, parent=None):

        super(PopupWindow, self).__init__()

    def run(self):


        for term in Control_system.add_data_list:

            self.popup.emit(term[0],term[1],term[2],term[3])

            time.sleep(1)
        Control_system.add_data_list = []
    def stop(self):  
        self.quit()
        self.wait()
...