1

こんばんは

PySide と一連の QWidget を使用してマルチウィンドウ アプリケーションを構築しています。CSV ファイルの項目を入力したい QTreeWidget があります。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ファイルを広範囲に使用しましたが、QTreeWidgetにCSVのエントリを入力する方法がわかりません。私はこれについていくつかの調査を行いましたが、まだ具体的なものは見つかりませんでした。私の基本的な解釈は次のとおりです。

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() を見たので、なぜこれが起こっているのかわかりません...

4

1 に答える 1

3

まだ作成されていない topLevelItem に Text を設定しようとしています。

csv データを使用して treeWidget に入力するだけの場合は、コンストラクターを使用する方が簡単QTreeWidgetItem(parentWidget, list_of_string)です。

そうすれば、アイテムを作成すると、自動的にparentWidgetにtopLevelItemとして追加され、コンストラクターに直接渡すため、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)
于 2013-11-13T09:11:09.107 に答える