Как добавить QComboBox в QTreeView, используя QItemDelegate - PullRequest
0 голосов
/ 16 ноября 2018

Как я могу добавить QComboBox во второй столбец указанных строк в моем QTreeView, используя QitemDelegate в Pyside?

Этот снимок экрана демонстрирует, какова моя цель:

enter image description here

Пока у меня есть это:

enter image description here

Вот мой код, моя цель - повторить то, что виднона изображении выше:

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