|
|
@@ -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_()) |
|
|
|