3+

QTreeWidget example

ツリー構造のリストを、割りと簡単に作るサンプル。
タプルのリストからツリーアイテムを作る。

タプル(k,v,n)の構造は、

  • k:ノードの名前
  • v:ノードの値
  • n:子ノード(のリスト)

以下ソース。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os, pprint, time
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def hoge(item,column):
    print item.data(column,Qt.UserRole).toString()

def make_tree(lst):

    items = []
    while len(lst):
        (k,v,n) = lst.pop(0)
        item = QTreeWidgetItem(QStringList(QString(str(k))))
        item.setData(0,Qt.UserRole,v)
        items.append(item)
        if n is not None:
            items[-1].addChildren( make_tree(n) )

    return items

def main():

    app = QApplication(sys.argv)
    app.setStyle( "Plastique" )

    lst = [("0",0,None),
           ("1",1,
            [
                ("1-0",10,None),
                ("1-1",11,None),
                ("1-2",12,
                 [
                        ("1-2-0",120,None),
                        ("1-2-1",121,None)
                        ]
                 ),
                ("1-3",13,None)
                ]
            ),
           ["2",2,None]]
    

    treeWidget = QTreeWidget()
    treeWidget.addTopLevelItems(make_tree(lst))
    treeWidget.itemClicked.connect(hoge)
    treeWidget.header().hide()
    treeWidget.show()

    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

f:id:zey:20140912222221p:plain

;(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) || 0 ol.className = "preLine" ol.setAttribute("role", "presentation") // no lang, no line-number if( pre.className && ! /lang-./.test(pre.className) ){ br.length += 1 } for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)