【问题标题】:Creating QTreeView hierarchy from a given list从给定列表创建 QTreeView 层次结构
【发布时间】:2019-02-13 07:17:48
【问题描述】:

给定一个字符串列表,我试图在树视图中填充项目。 这是我的代码:

class MyModel(QtGui.QStandardItemModel):
    def __init__(self, parent=None):
        super(MyModel, self).__init__(parent)
        self.get_contents()

    def get_contents(self):
        self.clear()
        contents = [
            '|Base|character|Mike|body',
            '|Base|character|John',
            '|Base|camera'
        ]

        for content in contents:
            count = content.count('|')
            for index in range(count):
                index = index + 2
                split_path = content.split('|')[0:index]
                self.add_item(split_path)

    def add_item(self,name):
        item1 = QtGui.QStandardItem(name)
        self.appendRow([item1])

但是,我在树视图中获得的层次结构不可折叠(旁边带有小箭头图标的那些),并且每一行都附加了值并且可编辑(如果双击),我不希望在其中.

我的代码的输出示例:

|Base
|Base|character
|Base|character|Mike
|Base|character|Mike|body
|Base
|Base|character
|Base|character|John
|Base
|Base|camera

其中有一些可重复的行...

这就是我所期待的:

|-- Base
|--|-- character
|--|--|-- Mike
|--|--|--|-- body
|--|-- character
|--|--|-- John
|--|-- camera

有什么见解吗?

【问题讨论】:

  • @eyllanesc 这将是 pyqt4

标签: python pyqt pyqt4 qtreeview


【解决方案1】:

如果这不是子元素的一部分,则必须添加子元素,还必须删除 split() 结果的第一个元素,因为它是一个空元素:

from PyQt4 import QtCore, QtGui


class MyModel(QtGui.QStandardItemModel):
    def __init__(self, parent=None):
        super(MyModel, self).__init__(parent)
        self.get_contents()

    def get_contents(self):
        self.clear()
        contents = [
            '|Base|character|Mike|body',
            '|Base|character|John',
            '|Base|camera'
        ]

        for content in contents:
            parent = self.invisibleRootItem()
            for word in content.split("|")[1:]:
                for i in range(parent.rowCount()):
                    item = parent.child(i) 
                    if item.text() == word:
                        it = item
                        break
                else:
                    it = QtGui.QStandardItem(word)
                    parent.setChild(parent.rowCount(), it)
                parent = it


if __name__ == '__main__':
    import sys

    app = QtGui.QApplication(sys.argv)

    w = QtGui.QTreeView()
    model = MyModel(w)
    w.setModel(model)
    w.show()
    w.expandAll()
    sys.exit(app.exec_())

【讨论】:

  • 谢谢,它有效。是否可以更改尺寸,例如。让物品看起来更大?和/或再次重复QStandardItemModel 中的每个项目,以便我将重新获取'|Base'、'|Base|character' 等......?
  • @dissidia 改变大小是什么意思?你想通过改变字体大小来改变项目的大小吗?
  • 是的,把字体变大
  • 嘿,很抱歉跳到你的话题上。我正在做类似的事情,我正在尝试添加刷新功能。我尝试使用<model>.clear(),然后重新调用似乎不起作用的MyModel() - 内容确实被清空了,它一直保持空白......
  • @yan 你在使用 QStandardItemModel 吗?
猜你喜欢
  • 2022-01-27
  • 2023-04-06
  • 2018-11-19
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多