【问题标题】:QStandardItem doesn't add children on first rowQStandardItem 不在第一行添加子项
【发布时间】:2020-04-16 12:25:08
【问题描述】:

显然,在同一行但在新列上设置一个项目,总是会添加一个新行。

from PySide2 import QtCore, QtWidgets, QtGui

# Items for the first row
my_item = QtGui.QStandardItem('Row 0, Col 0')
sub_item = QtGui.QStandardItem('Row 0, Col 1')

# This should add my sub item on the row 0...
my_item.setChild(0, 1, sub_item)

# Model and view
view = QtWidgets.QTreeView()
model = QtGui.QStandardItemModel()
model.setHorizontalHeaderLabels(['col1', 'col2'])
view.setModel(model)


model.appendRow(my_item)    
view.show()

我真正想要的是将我的数据放在一行中,而不是添加新行来显示列。

重要提示:我无法在创建项目的上下文中访问模型。

【问题讨论】:

    标签: python pyside2 qtreeview qstandarditem


    【解决方案1】:

    从您想要获得的内容可以清楚地看出,“sub_item”不是“my_item”的子项,而是兄弟项,因此您必须使用以下代码添加它:

    from PySide2 import QtCore, QtWidgets, QtGui
    
    
    if __name__ == "__main__":
    
        app = QtWidgets.QApplication()
    
        # Items for the first row
        my_item = QtGui.QStandardItem("Row 0, Col 0")
        sub_item = QtGui.QStandardItem("Row 0, Col 1")
    
        # Model and view
        view = QtWidgets.QTreeView()
        model = QtGui.QStandardItemModel()
        model.setHorizontalHeaderLabels(["col1", "col2"])
        view.setModel(model)
    
        model.appendRow([my_item, sub_item])
        view.show()
    
        app.exec_()

    【讨论】:

    • 感谢您的回答。不幸的是,就像我在第一条消息中指出的那样,在我创建项目的上下文中,没有模型。还有其他选择吗?
    • @Kos 我不明白你的意思,只需进行粗体更改并删除您删除的行。
    • 我发布的示例是对一个更大项目的过度简化。对于软件拥有的架构,当我有项目时,没有模型实例。我们最终放弃了 QStandardItem 和 QStandardItem 模型,转而采用更灵活的 QAbstractItemModel 和自定义项目,它可以根据需要管理数据。
    • @Kos 如果您不提供 MRE,那么我将无法为您提供帮助,我的回答是基于 OP 提供的 MRE。请阅读How to Ask 并查看tour
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    相关资源
    最近更新 更多