如何将QComboBox放在QTreeWidget中?

时间:2019-05-31 22:38:06

标签: python maya pyside2

我想在Maya ui的QTreeWidget中放置一个QComboBox。但是,当我尝试这样做时会崩溃。我想知道我在做什么错

我创建了一些代码,并在此处查找了一些解决方案,但是它们要么不起作用,要么用于另一种语言

def populate(self):
    rows = len(self.assets)
    tw = self.ui.My_QtTreeWidget
    assets = self.assets
    for i in range(len(assets)):
        combox = QtWidgets.QComboBox()
        item = QtWidgets.QTreeWidgetItem(tw, [assets[i][0], '2', '3', assets[i][1]])
        tw.setItemWidget(item, 1, combox)

预期:将组合框放入第二列

结果:Maya崩溃

1 个答案:

答案 0 :(得分:0)

我认为您没有使用QDelegate这类的东西。如果您尝试使用QtreeWidget,则可能必须为QTreeWidgetItem创建一个具有特殊小部件的类。

    def initUI(self):
        [...]
        self.treeWidget = QtWidgets.QTreeWidget()
        self.treeWidget.setColumnCount(2)
        self.treeWidget.setHeaderLabels(["Name", "ComboChoice"])

        [...]
        def populate(self):
            items = []
            for i in range(4):
                newItem = SpecialTreeItem(rf, self.tableTree)
                items.append(newItem)
            self.treeWidget.addTopLevelItems(items)
         [...]

class SpecialTreeItem(QtWidgets.QTreeWidgetItem):
    '''
    Custom QTreeWidgetItem with Widgets
    '''

    # This variable summerize value to be saved into json
    def __init__(self, name, parent):
        '''
        parent (QTreeWidget) : Item's QTreeWidget parent.
        name   (str)         : Item's name. just an example.
        '''

        ## Init super class ( QtGui.QTreeWidgetItem )
        QtWidgets.QTreeWidgetItem.__init__(self, parent)

        ## Column 0 - Text:
        self.setText(1, name)

        self.foo= QtWidgets.QComboBox()
        _foo = ['test', 'foo', 'apple']
        for _f in _foo:
            self.cb_rigtype.addItem(_f)
        self.foo.setCurrentIndex(0)
        self.treeWidget().setItemWidget(self, 1, self.foo)
相关问题