Python3 と pyside を使用します。Qtを使用してツリーとして表示したいPython辞書があります。キーではなく、値を編集可能にしたい。次の例に示すように、setItemWidgetを使用してこれを達成することができました。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PySide import QtGui
def data_to_tree(parent, data):
if isinstance(data, dict):
parent.setFirstColumnSpanned(True)
for key,value in data.items():
child = QtGui.QTreeWidgetItem(parent)
child.setText(0, key)
data_to_tree(child, value)
elif isinstance(data, list):
parent.setFirstColumnSpanned(True)
for index,value in enumerate(data):
child = QtGui.QTreeWidgetItem(parent)
child.setText(0, str(index))
data_to_tree(child, value)
else:
widget = QtGui.QLineEdit(parent.treeWidget())
widget.setText(str(data))
parent.treeWidget().setItemWidget(parent, 1, widget)
app = QtGui.QApplication(sys.argv)
wid = QtGui.QTreeWidget()
wid.setColumnCount(2)
wid.show()
data = {
'foo':'bar',
'bar': ['f', 'o', 'o'],
'foobar':0,
}
data_to_tree(wid.invisibleRootItem(), data)
sys.exit(app.exec_())
これは機能しますが、ドキュメントのアドバイス (静的コンテンツ) に反するため、事前に (別のスレッドなどで) ウィジェットを作成してからツリーに追加することができなくなります。私が望むものを達成するためのより良い方法はありますか? ドキュメントには QTreeView が記載されていますが、列で独自のウィジェットを使用するのにどのように役立つかを理解できる例/チュートリアルは見つかりませんでした。