def add_track_row(self, track): """ Adds a track row to the tracks table model. Args: track: Track label and trace Returns: id_item status_item age_item """ id_item = QStandardItem() id_item.setText(track[0]) id_item.setBackground(QBrush(QColor( get_random_color(int(track[0])) ))) id_item.setEditable(False) status_item = QStandardItem() status_item.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) status_item.setEditable(False) age_item = QStandardItem() age_item.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter) age_item.setEditable(False) self.tracks_model.appendRow([id_item, status_item, age_item]) self.tracks_model.sort(0) return id_item, status_item, age_item
def get_table_model(self, table_data: str): data = eval(table_data) n_machine = len(data) # 机器数量 error_number = "" # 有问题机器编号 table_model = QStandardItemModel() yellow = QColor(255, 255, 0) orange = QColor(255, 97, 0) # # 填充 table_model # for machine_number in range(1, n_machine + 1): i, j = self.get_row_col(machine_number) if data[machine_number][0] != 0: error_number += str(machine_number) + " " error_code_item = QStandardItem(str(data[machine_number][0])) error_code_item.setEditable(False) break_code = data[machine_number][0] if 0 < break_code <= 10: error_code_item.setBackground(QBrush(yellow)) elif break_code == 255: error_code_item.setBackground(QBrush(orange)) t0 = QStandardItem("%d号跟踪器故障代码" % (machine_number)) t0.setEditable(False) table_model.setItem(i, j, t0) table_model.setItem(i, j + 1, error_code_item) t1 = QStandardItem("%d号跟踪器控制代码" % (machine_number)) t1.setEditable(False) item1 = QStandardItem(str(data[machine_number][1])) item1.setEditable(False) table_model.setItem(i + 1, j, t1) table_model.setItem(i + 1, j + 1, item1) t2 = QStandardItem("%d号跟踪器锁状态" % (machine_number)) t2.setEditable(False) item2 = QStandardItem(str(data[machine_number][2])) item2.setEditable(False) table_model.setItem(i + 2, j, t2) table_model.setItem(i + 2, j + 1, item2) t3 = QStandardItem("%d号跟踪器实时角度" % (machine_number)) t3.setEditable(False) item3 = QStandardItem(str(data[machine_number][3])) item3.setEditable(False) table_model.setItem(i + 3, j, t3) table_model.setItem(i + 3, j + 1, item3) return table_model, error_number
def load(self, history): responses = history['response_history'] self.response_history.setSortingEnabled(False) for response in responses: if response not in self.existing_responses: self.response_rows.insertRow(0) timestamp = QStandardItem() timestamp.setData(response[0], QtCore.Qt.EditRole) self.response_rows.setItem(0, 0, timestamp) transaction_id = QStandardItem() transaction_id.setData(response[1], QtCore.Qt.EditRole) self.response_rows.setItem(0, 1, transaction_id) unit_address = QStandardItem() unit_address.setData(response[2], QtCore.Qt.EditRole) self.response_rows.setItem(0, 2, unit_address) function_code = QStandardItem() function_code.setData(response[3], QtCore.Qt.EditRole) self.response_rows.setItem(0, 3, function_code) data = QStandardItem() data.setData(str(response[4]), QtCore.Qt.EditRole) self.response_rows.setItem(0, 4, data) if response[3] in [x.value for x in ErrorCodes]: error_color = QtGui.QColor(255, 114, 111) timestamp.setBackground(error_color) transaction_id.setBackground(error_color) unit_address.setBackground(error_color) function_code.setBackground(error_color) data.setBackground(error_color) self.response_history.setModel(self.response_rows) self.existing_responses = self.existing_responses | set(responses) self.response_history.setSortingEnabled(True) requests = history['request_history'] self.request_history.setSortingEnabled(False) for request in requests: if request not in self.existing_requests: self.request_rows.insertRow(0) timestamp = QStandardItem() timestamp.setData(request[0], QtCore.Qt.EditRole) self.request_rows.setItem(0, 0, timestamp) transaction_id = QStandardItem() transaction_id.setData(request[1], QtCore.Qt.EditRole) self.request_rows.setItem(0, 1, transaction_id) unit_address = QStandardItem() unit_address.setData(request[2], QtCore.Qt.EditRole) self.request_rows.setItem(0, 2, unit_address) function_code = QStandardItem() function_code.setData(request[3], QtCore.Qt.EditRole) self.request_rows.setItem(0, 3, function_code) data = QStandardItem() data.setData(str(request[4]), QtCore.Qt.EditRole) self.request_rows.setItem(0, 4, data) if request[3] in [x.value for x in ErrorCodes]: error_color = QtGui.QColor(255, 114, 111) timestamp.setBackground(error_color) transaction_id.setBackground(error_color) unit_address.setBackground(error_color) function_code.setBackground(error_color) data.setBackground(error_color) self.request_history.setModel(self.request_rows) self.existing_requests = self.existing_requests | set(requests) self.request_history.setSortingEnabled(True)
if __name__ == '__main__': app = QApplication(sys.argv) model_size = 100000 list = [] source_model = QStandardItemModel() horizontal_header_list = [ "First Column with spacing", "Second Column with spacing" ] source_model.setHorizontalHeaderLabels(horizontal_header_list) for i in range(model_size): first_item = QStandardItem("FancyTextNumber {}".format(i)) if i == 0: first_item.appendRow(add_child(2, 2)) second_item = QStandardItem("FancyRow2TextNumber {}".format(i)) if i % 2 == 0: first_item.setBackground(Qt.red) row = [first_item, second_item] source_model.invisibleRootItem().appendRow(row) list.append("FancyTextNumber {}".format(i)) # Needed by QMLModelViewClient role_names = { Qt.DisplayRole: QByteArray(b'_text'), Qt.BackgroundRole: QByteArray(b'_color') } source_model.setItemRoleNames(role_names) roles = [Qt.DisplayRole, Qt.BackgroundRole] print("Creating registry host") node = QRemoteObjectRegistryHost(QUrl("local:registry"))