天儿真好,
我正在使用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()...
答案 0 :(得分:3)
您正尝试在尚未创建的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)