功能设置enable to False只在某些按钮上起作用?

2024-10-01 09:39:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为操作员设置一个控制面板。每当心跳停止增加,5秒后,LED变为红色。这也会启用确认按钮。当我点击它们时,LED变为黄色,我想再次禁用按钮。问题是,出于某种原因,它只适用于代码中的一些按钮。知道为什么吗?它只适用于左侧的按钮,而不适用于右侧的按钮。我确信错误发生在“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_())


Tags: falsetrueuistringifparameterlabelrow