Функция настройки Enable на False работает только на некоторых кнопках? - PullRequest
0 голосов
/ 01 октября 2019

Я работаю над настройкой панели управления для операторов. всякий раз, когда сердцебиение прекращает увеличиваться, через 5 секунд светодиод меняется на красный. Это также включает кнопки подтверждения. Когда я нажимаю на них, индикатор горит желтым, и я хотел бы снова отключить кнопку. Проблема в том, что по какой-то причине он работает только для некоторых кнопок в моем коде. Есть идеи, почему это может быть? Это работает только для кнопок на левой стороне, а не на правой стороне. Я уверен, что ошибка происходит в «heartbeats [string] [5] .setEnabled (False)»


def ack_thread(string):
    ack = threading.Thread(target=acknowledge, args=(string,))
    ack.start()

def acknowledge(string):
    global heartbeats
    rowcount = ui.tableWidget.rowCount()
    for x in range(0, rowcount, 1):
        if ui.tableWidget.item(x,0).text() == string:
            print(ui.tableWidget.item(x,0).text())
            if ui.tableWidget.item(x,4).text() == 'False':
                ui.tableWidget.setItem(x, 4, QtWidgets.QTableWidgetItem("True"))
                ui.tableWidget.viewport().update()
    heartbeats[string][3].setPixmap(ui.yellowled)
    print(heartbeats[string][5])
    # heartbeats[string][5].setEnabled(True)
    heartbeats[string][5].setEnabled(False)

def gettime():
    import datetime
    currentDT = datetime.datetime.now()
    return currentDT.strftime("%Y-%m-%d %H:%M:%S")

def alarm_handler(source):
    rowPosition = ui.tableWidget.rowCount()
    ui.tableWidget.insertRow(rowPosition)
    ui.tableWidget.setItem(rowPosition, 0, QtWidgets.QTableWidgetItem(source))
    ui.tableWidget.setItem(rowPosition, 1, QtWidgets.QTableWidgetItem("text1"))
    ui.tableWidget.setItem(rowPosition, 2, QtWidgets.QTableWidgetItem("text2"))
    ui.tableWidget.setItem(rowPosition, 3, QtWidgets.QTableWidgetItem(gettime()))
    ui.tableWidget.setItem(rowPosition, 4, QtWidgets.QTableWidgetItem("False"))

def heartbeat():
    import mhs2
    from time import sleep
    global heartbeats
    mhs2.DB_CONFIG['host'] = '192.168.1.79'
    # old value, new value, number of failures, LED object, checkbutton object, Acknowledge object,acknowledged
    heartbeats = {
        'pd1_hb': [0, 0, 0, ui.label_26, ui.checkBox_7, ui.pushButton_11, True],
        'pd9_hb': [0, 0, 0, ui.label_20, ui.checkBox_12, ui.pushButton_13, True],
        'pd11_hb': [0, 0, 0, ui.label_21, ui.checkBox_11, ui.pushButton_12, True],
        'pd13_hb': [0, 0, 0, ui.label_22, ui.checkBox_13, ui.pushButton_2, True],
        'irr1_hb': [0, 0, 0, ui.label_25, ui.checkBox_8, ui.pushButton_5, True],
        'irr2_hb': [0, 0, 0, ui.label_24, ui.checkBox_9, ui.pushButton_4, True],
        'irr5_hb': [0, 0, 0, ui.label_23, ui.checkBox_10, ui.pushButton_3, True],
        'kyledata_hb': [0, 0, 0, ui.label_14, ui.checkBox, ui.pushButton, True],
        'standata_hb': [0, 0, 0, ui.label_19, ui.checkBox_3, ui.pushButton_10, True],
        'kennydata_hb': [0, 0, 0, ui.label_18, ui.checkBox_4, ui.pushButton_9, True],
        'cartmandata_hb': [0, 0, 0, ui.label_17, ui.checkBox_6, ui.pushButton_8, True],
        'chefdata_hb': [0, 0, 0, ui.label_16, ui.checkBox_5, ui.pushButton_6, True],
        'buttarsdata_hb':  [0, 0, 0, ui.label_15, ui.checkBox_2, ui.pushButton_7, True]
    }

    for item in heartbeats:
        heartbeats[item][3].setPixmap(ui.offled)
    query = "SELECT * FROM Heartbeat"
    enable = mhs2.exec_query(query)
    for row in enable:
        if row['enable'] == 1:
            heartbeats[row['parameter']][4].setChecked(True)
        else:
            heartbeats[row['parameter']][4].setChecked(False)
    while 1:
        command = "SELECT * FROM Heartbeat"
        hb = mhs2.exec_query(command)
        for row in hb:
            if heartbeats[row['parameter']][4].isChecked():
                heartbeats[row['parameter']][1] = row['value']
                if heartbeats[row['parameter']][1] != heartbeats[row['parameter']][0]:
                    heartbeats[row['parameter']][2] = 0
                    heartbeats[row['parameter']][3].setPixmap(ui.greenled)
                    heartbeats[row['parameter']][6] = True
                else:
                    heartbeats[row['parameter']][2] += 1
                if heartbeats[row['parameter']][2] > 5 and heartbeats[row['parameter']][6]:
                    heartbeats[row['parameter']][3].setPixmap(ui.redled)
                    heartbeats[row['parameter']][5].setEnabled(True)
                    heartbeats[row['parameter']][6] = False
                    alarm = threading.Thread(target=alarm_handler,args=(row['parameter'],))
                    alarm.start()
                heartbeats[row['parameter']][0] = heartbeats[row['parameter']][1]
            else:
                heartbeats[row['parameter']][3].setPixmap(ui.offled)

        sleep(1)
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    hb = threading.Thread(target=heartbeat)
    hb.start()
    sys.exit(app.exec_())

...