Skip to content

Instantly share code, notes, and snippets.

@yucongo
Forked from Riateche/gist:5984815
Created December 5, 2016 00:38
Show Gist options
  • Select an option

  • Save yucongo/dcc6dcda6fc87ca3026ae144cddea521 to your computer and use it in GitHub Desktop.

Select an option

Save yucongo/dcc6dcda6fc87ca3026ae144cddea521 to your computer and use it in GitHub Desktop.

Revisions

  1. @Riateche Riateche created this gist Jul 12, 2013.
    100 changes: 100 additions & 0 deletions gistfile1.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,100 @@
    import sip
    sip.setapi('QString', 2)
    sip.setapi('QVariant', 2)


    from PyQt4 import QtCore, QtGui

    class TableModel(QtCore.QAbstractTableModel):
    """
    A simple 5x4 table model to demonstrate the delegates
    """
    def rowCount(self, parent=QtCore.QModelIndex()): return 5
    def columnCount(self, parent=QtCore.QModelIndex()): return 4

    def data(self, index, role=QtCore.Qt.DisplayRole):
    if not index.isValid(): return None
    if not role==QtCore.Qt.DisplayRole: return None
    return "{0:02d}".format(index.row())

    def setData(self, index, value, role=QtCore.Qt.DisplayRole):
    print "setData", index.row(), index.column(), value

    def flags(self, index):
    if (index.column() == 0):
    return QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled
    else:
    return QtCore.Qt.ItemIsEnabled


    class ComboDelegate(QtGui.QItemDelegate):
    """
    A delegate that places a fully functioning QComboBox in every
    cell of the column to which it's applied
    """
    def __init__(self, parent):

    QtGui.QItemDelegate.__init__(self, parent)

    def createEditor(self, parent, option, index):
    combo = QtGui.QComboBox(parent)
    li = []
    li.append("Zero")
    li.append("One")
    li.append("Two")
    li.append("Three")
    li.append("Four")
    li.append("Five")
    combo.addItems(li)
    self.connect(combo, QtCore.SIGNAL("currentIndexChanged(int)"), self, QtCore.SLOT("currentIndexChanged()"))
    return combo

    def setEditorData(self, editor, index):
    editor.blockSignals(True)
    editor.setCurrentIndex(int(index.model().data(index)))
    editor.blockSignals(False)

    def setModelData(self, editor, model, index):
    model.setData(index, editor.currentIndex())

    @QtCore.pyqtSlot()
    def currentIndexChanged(self):
    self.commitData.emit(self.sender())

    class TableView(QtGui.QTableView):
    """
    A simple table to demonstrate the QComboBox delegate.
    """
    def __init__(self, *args, **kwargs):
    QtGui.QTableView.__init__(self, *args, **kwargs)

    # Set the delegate for column 0 of our table
    # self.setItemDelegateForColumn(0, ButtonDelegate(self))
    self.setItemDelegateForColumn(0, ComboDelegate(self))


    if __name__=="__main__":
    from sys import argv, exit

    class Widget(QtGui.QWidget):
    """
    A simple test widget to contain and own the model and table.
    """
    def __init__(self, parent=None):
    QtGui.QWidget.__init__(self, parent)

    l=QtGui.QVBoxLayout(self)
    self._tm=TableModel(self)
    self._tv=TableView(self)
    self._tv.setModel(self._tm)
    for row in range(0, self._tm.rowCount()):
    self._tv.openPersistentEditor(self._tm.index(row, 0))

    l.addWidget(self._tv)

    a=QtGui.QApplication(argv)
    w=Widget()
    w.show()
    w.raise_()
    exit(a.exec_())