def createGUI(self): colorEditorFactory = QItemEditorFactory() colorEditorFactory.registerEditor(QVariant.Color, ColorListItemEditorCreator()) colorEditorDelegate = QStyledItemDelegate(self) colorEditorDelegate.setItemEditorFactory(colorEditorFactory) figureEditorFactory = QItemEditorFactory() figureEditorFactory.registerEditor(QVariant.String, FigureListItemEditorCreator()) figureEditorDelegate = QStyledItemDelegate(self) figureEditorDelegate.setItemEditorFactory(figureEditorFactory) self.regionTableWidget.cellChanged.connect(self.regionTableWidgetCellChanged) self.regionTableWidget.setColumnCount(3) self.regionTableWidget.setItemDelegateForColumn(1, colorEditorDelegate) self.regionTableWidget.setItemDelegateForColumn(2, figureEditorDelegate) self.regionTableWidget.setHorizontalHeaderLabels(["Name", "Color", "Type"]) self.regionTableWidget.verticalHeader().setVisible(False) self.regionTableWidget.resize(150, 50) qApp = QtWidgets.qApp self.upRegionButton.setIcon(qApp.style().standardIcon(QStyle.SP_ArrowUp)) self.downRegionButton.setIcon(qApp.style().standardIcon(QStyle.SP_ArrowDown)) self.addRegionButton.clicked.connect(self.addRegionButtonClicked) self.removeRegionButton.clicked.connect(self.removeRegionButtonClicked) self.upRegionButton.clicked.connect(self.upRegionButtonClicked) self.downRegionButton.clicked.connect(self.downRegionButtonClicked) self.radiusSpinBox.valueChanged.connect(self.radiusSpinBoxValueChanged)
def createAllView(self): styledItemDelegate = QStyledItemDelegate() styledItemDelegate.setItemEditorFactory(ItemEditorFactory()) self.setItemDelegate(styledItemDelegate) # create the view self.setSelectionMode(QAbstractItemView.SingleSelection) #self.setSelectionBehavior(QAbstractItemView.SelectRows) # set the table model self.tablemodel = MyTableModel(self) self.setModel(self.tablemodel) self.clicked.connect(self.showSelection) #self.dataChanged.connect(self.selection_changed) # set the minimum size self.setMinimumSize(100, 100) # set horizontal header properties hh = self.horizontalHeader() hh.setMinimumSectionSize(75) hh.setStretchLastSection(True) hh.setSortIndicator(1, Qt.AscendingOrder) vh = self.verticalHeader() vh.setVisible(False) # set column width to fit contents self.resizeColumnsToContents() # set row height self.resizeRowsToContents() # enable sorting self.setSortingEnabled(True)
def createGUI(self): colorEditorFactory = QItemEditorFactory() colorListItemEditorCreator = ColorListItemEditorCreator() colorListItemEditorCreator.setActivatedSlot(self.comboBoxActivated) colorEditorFactory.registerEditor(QVariant.Color, colorListItemEditorCreator) colorEditorDelegate = QStyledItemDelegate(self) colorEditorDelegate.setItemEditorFactory(colorEditorFactory) figureEditorFactory = QItemEditorFactory() figureListItemEditorCreator = FigureListItemEditorCreator() figureListItemEditorCreator.setActivatedSlot(self.comboBoxActivated) figureEditorFactory.registerEditor(QVariant.String, figureListItemEditorCreator) figureEditorDelegate = QStyledItemDelegate(self) figureEditorDelegate.setItemEditorFactory(figureEditorFactory) self.regionTableWidget.cellChanged.connect( self.regionTableWidgetCellChanged) self.regionTableWidget.setColumnCount(3) self.regionTableWidget.setItemDelegateForColumn(1, colorEditorDelegate) self.regionTableWidget.setItemDelegateForColumn( 2, figureEditorDelegate) self.regionTableWidget.setHorizontalHeaderLabels( ["Name", "Color", "Type"]) self.regionTableWidget.verticalHeader().setVisible(False) self.regionTableWidget.resize(150, 50) qApp = QtWidgets.qApp self.upRegionButton.setIcon(qApp.style().standardIcon( QStyle.SP_ArrowUp)) self.downRegionButton.setIcon(qApp.style().standardIcon( QStyle.SP_ArrowDown)) self.addRegionButton.clicked.connect(self.addRegionButtonClicked) self.removeRegionButton.clicked.connect(self.removeRegionButtonClicked) self.upRegionButton.clicked.connect(self.upRegionButtonClicked) self.downRegionButton.clicked.connect(self.downRegionButtonClicked) self.radiusSpinBox.valueChanged.connect(self.radiusSpinBoxValueChanged) self.actionCoordinates.triggered.connect(self.setCoordinatesVisible) self.actionPoints.triggered.connect(self.setPointsVisible) self.actionLines.triggered.connect(self.setLinesVisible) self.actionRegions.triggered.connect(self.setRegionsVisible)
class RecipientsEditor(QTableWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setRowCount(1) self.setColumnCount(2) self.verticalHeader().hide() self.horizontalHeader().hide() self.horizontalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) self.tdelegate = QStyledItemDelegate() self.tdelegate.setItemEditorFactory(TypeFactory(self)) self.setItemDelegateForColumn(0, self.tdelegate) self.edelegate = QStyledItemDelegate() self.edelegate.setItemEditorFactory(EditorFactory(self)) self.setItemDelegateForColumn(1, self.edelegate) self.itemChanged.connect(self._updateColumnCount) self.setItem(0, 0, QTableWidgetItem('To')) self.msg = None def set_message(self, msg): self.msg = msg @Slot(QTableWidgetItem) def _updateColumnCount(self, qitem): if qitem.column() == 0: return if not qitem.text().strip(): if self.rowCount() > 1: self.removeRow(qitem.row()) elif qitem.row() + 1 == self.rowCount(): cur = self.rowCount() self.setRowCount(cur + 1) self.setItem(cur, 0, QTableWidgetItem('To')) def sizeHint(self): return QSize(0, self.sizeHintForRow(0)) def set_recipients(self, *, to=None, cc=None, bcc=None): by_type = { 'To': to or (), 'Cc': cc or (), 'Bcc': bcc or (), } self.setRowCount(sum(len(addrs) for addrs in by_type.values()) + 1) row = 0 for type_, pairs in by_type.items(): for name, addr in pairs: self.setItem(row, 0, QTableWidgetItem(type_)) if name: self.setItem(row, 1, QTableWidgetItem(f'{name} <{addr}>')) else: self.setItem(row, 1, QTableWidgetItem(addr)) row += 1 def get_recipients(self): by_type = { 'To': [], 'Cc': [], 'Bcc': [], } for row in range(self.rowCount() - 1): # last line is supposed to be empty text = self.item(row, 1).text() mtc = re.fullmatch(r'(.*)\s*<([^>]+)>\s*', text) if mtc: name = mtc[1].strip() addr = mtc[2] else: name = '' addr = text by_type[self.item(row, 0).text()].append((name, addr)) return by_type editStarted = Signal(QLineEdit)