def setData(self, data, itemHandler): logger.debug('Set Data') if not data: self.setMaximumHeight(40) return if not isinstance(data, list): data.setView(self) self.data = data.value else: self.data = data row_number = len(self.data) self.setRowCount(row_number) for cur_row in range(row_number): items = itemHandler(self.data[cur_row]) i = 0 for item in items: if isinstance(item, str): widget = QTableWidgetItem(item) self.setItem(cur_row, i, widget) else: layout = QHBoxLayout() layout.addWidget(item) layout.setContentsMargins(0, 0, 0, 0) widget = QWidget() widget.setLayout(layout) widget.setStyleSheet( "background: {}".format("#f3f3f3" if cur_row % 2 else "#ffffff")) self.setCellWidget(cur_row, i, widget) i += 1 if row_number > 0: self.setMinimumHeight(180) else: self.setMaximumHeight(32) self.row_number = row_number
def addTable(self, value): row = len(value) col = len(value[0]) self.comboBoxList = list() table = QTableWidget() table.setRowCount(row) table.setColumnCount(col) table.setHorizontalHeaderLabels(value[0]) table.horizontalHeader().setEnabled(False) table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) table.horizontalHeader().setDefaultAlignment(Qt.AlignCenter) table.verticalHeader().hide() for i, row in enumerate(value[1:]): for j, cell in enumerate(row): if isinstance(cell, dict): if not cell.get('select', False): newItem = QTableWidgetItem(cell.get('value', '')) newItem.setTextAlignment(Qt.AlignHCenter) newItem.setTextAlignment(Qt.AlignCenter) table.setItem(i, j, newItem) elif not cell.get('corresponding', False): newItem = QComboBox() newItem.setAcceptDrops(True) newItem.setStyleSheet( 'margin:0;padding:0;border:0.5pxbackground-color:white;text-align:center;vertical-align:middle;' ) newItem.setSizeAdjustPolicy(QComboBox.AdjustToContents) newItem.addItem(cell.get('value', '')) for sender in self.senderwindow.senderList[1:]: newItem.addItem(str(sender[0])) table.setCellWidget(i, j, newItem) table.cellWidget(i, j).currentTextChanged.connect( self.tableComboBoxChange) self.comboBoxList.append(newItem) else: newItem = QLineEdit() newItem.setStyleSheet( 'margin:0;padding:0;border:0.5px;text-align:center;background-color:white;vertical-align:middle;' ) newItem.setText(cell.get('value', '')) table.setCellWidget(i, j, newItem) elif isinstance(cell, str): newItem = QTableWidgetItem(cell) newItem.setTextAlignment(Qt.AlignHCenter) newItem.setTextAlignment(Qt.AlignCenter) table.setItem(i, j, newItem) QApplication.processEvents() table.setEnabled(False) self.tableWidget = table self.gridLayout.addWidget(self.tableWidget)