0

我正在研究 python 插件。我使用了PyQt4 Designer。我想将查询结果列出到QTreeWidget中。我的代码如下:

c = self.db.con.cursor()
self.db._exec_sql(c, "select est from bio")
for row in c.fetchall():
    item_value=unicode(row[0])
    top_node1 = QTreeWidgetItem(item_value)
    self.treeWidget.insertTopLevelItem(0, top_node1)

查询将值返回为:

在此处输入图像描述

但是当我使用上面的代码将这些值列出到QTreeWidget中时,如下所示:

在此处输入图像描述

仅显示第一个字符。如果我将 self.treeWidget.insertTopLevelItem(0, top_node1) 中的“0”更改为其他数字,则QTreeWidget中不会出现任何内容。

我该怎么做????谢谢。

4

2 回答 2

2

如果您查看QTreeWidgetItem 的文档,您将看到有许多可能的构造函数用于创建实例。尽管您似乎都没有以一种会给您带来理想结果的方式使用它们。与您提供的签名最接近的匹配是:

QTreeWidgetItem ( const QStringList & strings, int type = Type )

这可能正在做的是获取您的字符串(我假设row[0]是一个字符串,因为我不知道您正在使用哪些驱动程序)并将其作为一个序列应用,这将满足QStringList. 因此,您得到的是用字符串值的每个字母填充项目的多个列。如果这是您想要的,那么您需要告诉您的小部件显示更多列:self.treeWidget.setColumnCount(10). 但这不是你要找的我敢肯定。

您应该尝试的更有可能是创建一个新项目,然后将该值添加到所需的列:

item = QTreeWidgetItem()
item.setText(0, unicode(row[0]))
self.treeWidget.insertTopLevelItem(0, item)

您可以使用不带参数的默认构造函数,将第一列的文本值设置为数据库记录字段值,然后将该项目添加到树中。您还可以建立一个项目列表并立即添加它们:

items = []
for row in c.fetchall():
    item = QTreeWidgetItem()
    item.setText(0, unicode(row[0]))
    items.append(item)
self.treeWidget.insertTopLevelItems(0, items)
于 2012-07-07T06:09:28.737 回答
1

您的第一种方法可以纠正,只需向小部件添加一个列表,而不是这样的字符串:

top_node1 = QTreeWidgetItem([item_value])

于 2012-08-03T22:39:32.403 回答