G'day,

我正在使用PySide和一堆QWidgets构建一个多窗口应用程序。我有一个QTreeWidget,我想用CSV文件中的项目填充。 treeWidget具有3列(静态)和动态行数。

到目前为止,我一直在手动填充QTreeWidget,但是我已经开始从纯粹的美学转向功能正常的系统。这是我一直在使用的:

items = QtGui.QTreeWidgetItem(self.treeWidgetLog)
items.setText(0, "Item 1")
items.setText(1, "Item 2")
items.setText(2, "Item 3")


这仅适用于添加单行,但到现在为止已经足够了。

过去,我在Python中广泛使用了csv文件,但是我不确定如何用CSV条目填充QTreeWidget。我已经对此进行了一些研究,但到目前为止还没有发现任何具体的东西。我的基本解释是:

with open('Log.csv', 'rt') as f:
    reader = csv.reader(f)
    m = 0
    for row in reader:
        n = 0
        for field in row:
            items.setText(n, field)
            n = n + 1
            return
        m = m + 1


那只是我对可能的解决方案的直观解释的快速伪脚本。我不确定如何在向QTreeWidget添加行时合并行数(m)。

有任何想法吗?

谢谢!

编辑:这是我正在工作的快速更新:

with open('Log.csv', 'rt') as f:
    reader = csv.reader(f)
    m = 0
    for row in reader:
        n = 0
        for field in row:
            self.treeWidgetLog.topLevelItem(m).setText(n, field)
            n = n + 1
        m = m + 1


但是,上面给了我以下错误:


  AttributeError:“ NoneType”对象没有属性“ setText”


我不确定为什么会这样,因为我之前看过topLevelItem()。setText()...

最佳答案

您正在尝试在尚未创建的topLevelItem上设置Text。

如果只想使用csv数据填充treeWidget,则使用构造函数QTreeWidgetItem(parentWidget, list_of_string)更为容易。

这样,当您创建项目时,它会作为topLevelItem自动添加到parentWidget,并且您不再需要遍历csv行,因为您将它们直接传递给了构造函数。

def populate(self):
    with open('Log.csv', 'rt') as f:
        reader = csv.reader(f)
        for row in reader:
            item = QtGui.QTreeWidgetItem(self.treeWidgetLog, row)

关于python - 从CSV文件填充QTreeWidget-PySide/PyQt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19940445/

10-11 23:44