Bonjour,

Je veux afficher une QTableView dont une des colonnes serait des listes déroulantes. Grâce à ce vieux post : http://www.developpez.net/forums/d76...iew-delegates/

J'ai plus ou moins repris son code et du coup j'ai le même problème, c'est-à-dire que les comboBox s'affichent mais elles ne gardent pas les valeurs que l'utilisateur sélectionne.

Une idée pour me débloquer serait vraiment bienvenue !

Ci-dessous les parties utiles du code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class ComboBoxDelegate(QtGui.QItemDelegate):
 
	def __init__(self, owner, itemslist):
		QtGui.QItemDelegate.__init__(self, owner)
		self.itemslist = itemslist
 
	def paint(self, painter, option, index):		
		# Get Item Data
		value = index.data(QtCore.Qt.DisplayRole).toInt()[0]
		# fill style options with item data
		style = QtGui.QApplication.style()
		opt = QtGui.QStyleOptionComboBox()
		opt.currentText = str(self.itemslist[value])
		opt.rect = option.rect
 
		# draw item data as ComboBox
		style.drawComplexControl(QtGui.QStyle.CC_ComboBox, opt, painter)
 
	def createEditor(self, parent, option, index):
		# create the ProgressBar as our editor.
		editor = QtGui.QComboBox(parent)
		editor.addItems(self.itemslist)
		editor.setCurrentIndex(0)
		editor.installEventFilter(self)			
		return editor
 
	def setEditorData(self, editor, index):
		value = index.data(QtCore.Qt.DisplayRole).toInt()[0]
		editor.setCurrentIndex(value)
 
	def setModelData(self,editor,model,index):
		value = editor.currentIndex()
		model.setData(index, QtCore.QVariant(value))
 
	def updateEditorGeometry(self, editor, option, index):
		editor.setGeometry(option.rect)
 
 
 
    class SequenceGridModel(QtCore.QAbstractTableModel):
    def __init__(self, datain, headerdata, parent=None, *args):
        QtCore.QAbstractTableModel.__init__(self, parent, *args)
        self.parent = parent
        self.arraydata = datain
        self.headerdata = headerdata
 
    def flags(self, index):
        if index.column() == 13:
            return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable
        return QtCore.QAbstractTableModel.flags(self, index)
 
 
    def data(self, index, role = QtCore.Qt.DisplayRole):
      if not index.isValid():
         if role == QtCore.Qt.UserRole:
            return None
         else:
            return QtCore.QVariant()
 
      value = QtCore.QVariant(self.arraydata[index.row()][index.column()])
 
      if QtCore.Qt.UserRole == role:
         return value
      elif role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:
         return QtCore.QVariant(value)
      return QtCore.QVariant()
 
 
 
    class SequenceGrid(QtGui.QTableView):
    def __init__(self, parent=None):
        QtGui.QTableView.__init__(self, parent) 
 
        self.selectedIndexes = []
        self.parent = parent
 
        self.checkValues = ['TODO', 'WAITING', 'RETAKE', 'OK']
 
        self.model = SequenceGridModel(self.data, header, self)
        self.setModel(self.model)
        self.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
        self.viewport().installEventFilter(self)
        self.setItemDelegateForColumn(13,ComboBoxDelegate(self, self.checkValues))
 
        self.setColumnWidth(13, 64)
Merci d'avance pour votre aide!