0

私はPythonプラグインに取り組んでいます。PyQt4Designerを使用ました。クエリ結果を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

最初のアプローチは、次のような文字列ではなく、widgetitem にリストを追加するだけで修正できます。

top_node1 = QTreeWidgetItem([item_value])

于 2012-08-03T22:39:32.403 に答える