Как я могу добавить QComboBox во второй столбец указанных строк в моем QTreeView, используя QitemDelegate в Pyside?
Этот снимок экрана демонстрирует, какова моя цель:
Пока у меня есть это:
Вот мой код, моя цель - повторить то, что виднона изображении выше:
import sys
from PySide import QtGui, QtCore
items = {
'Category A': {
'Fruit' : ['Oranges', 'Watermellons', 'Apples'],
'Vegetables' : ['Peppers','Potatoes','Carrots']
},
'Category B': {
'Sweets' : ['Donuts', 'Icecream', 'Candies']
}
}
class Window(QtGui.QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.resize(400,400)
# controls
self.button = QtGui.QPushButton('Print')
self.treeview = QtGui.QTreeView()
self.treeview.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.treeview.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
self.treeview.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.treeview.setModel(QtGui.QStandardItemModel())
# layout
layout = QtGui.QVBoxLayout()
layout.addWidget(self.treeview)
layout.addWidget(self.button)
self.setLayout(layout)
# populate ui
self.populate_treeview()
def populate_treeview(self):
model = self.treeview.model()
self.treeview.setSortingEnabled(False)
for catKey, catValues in items.items():
print catKey
item = QtGui.QStandardItem()
fnt = item.font()
fnt.setBold(True)
item.setFont(fnt)
item.setCheckable(False)
item.setData(catKey, role=QtCore.Qt.UserRole)
item.setData(catKey, role=QtCore.Qt.DisplayRole)
for key, keyValues in catValues.items():
print '\t', key, keyValues
itemName = QtGui.QStandardItem()
itemName.setCheckable(False)
itemName.setData(key, role=QtCore.Qt.UserRole)
itemName.setData(key, role=QtCore.Qt.DisplayRole)
item.appendRow(itemName)
model.appendRow(item)
self.treeview.setSortingEnabled(True)
self.treeview.sortByColumn(0, QtCore.Qt.AscendingOrder)
self.treeview.expandAll()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
win = Window()
win.show()
app.exec_()