#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
PyQt4 conversion of Qt Model-View Tutorial
Build a selectable tree view and update the application's
Window Title with the selected item's content and
hierarchy level.
NOTES:
=====
Tree is displayed as one expandable column.
last modified: 2012-01-28 jg
ref:
http://developer.qt.nokia.com/doc/qt-4.8/modelview.html#3-2-working-with-selections
'''
from PyQt4.QtGui import (QApplication, QMainWindow, QTreeView, QStandardItem,
QStandardItemModel, QItemSelection)
from PyQt4.QtCore import (pyqtSlot, Qt, QModelIndex)
ROWS = 2
COLUMNS = 3
class MainWindow(QMainWindow):
def __init__(self, parent=None): # initialise base class
super(MainWindow, self).__init__(parent)
self.treeView = QTreeView(self)
self.setCentralWidget(self.treeView)
stdModel = QStandardItemModel()
rootNode = stdModel.invisibleRootItem()
# define a few items
americaItem = QStandardItem("America");
mexicoItem = QStandardItem("Canada");
usaItem = QStandardItem("USA");
bostonItem = QStandardItem("Boston");
europeItem = QStandardItem("Europe");
italyItem = QStandardItem("Italy");
romeItem = QStandardItem("Rome");
veronaItem = QStandardItem("Verona");
# build the hierarchy
rootNode.appendRow(americaItem);
rootNode.appendRow(europeItem);
americaItem.appendRow(mexicoItem);
americaItem.appendRow(usaItem);
usaItem.appendRow(bostonItem);
europeItem.appendRow(italyItem);
italyItem.appendRow(romeItem);
italyItem.appendRow(veronaItem);
# register the model
self.treeView.setModel(stdModel)
self.treeView.expandAll()
# connect selection signal to slot
selModel = self.treeView.selectionModel()
selModel.selectionChanged.connect(self.selChanged)
@pyqtSlot(QItemSelection, QItemSelection)
def selChanged(self, newSel, oldSel):
# get selected item's text
index = self.treeView.selectionModel().currentIndex()
selText = index.data(Qt.DisplayRole)
# find the selected item's hierarchy level
hierLevel = 1
seekRoot = index
while seekRoot.parent() != QModelIndex():
seekRoot = seekRoot.parent()
hierLevel += 1
# update the window title
showString = "{0}, Level {1}".format(selText, hierLevel)
self.setWindowTitle(showString)
# main ========================================================================
def main():
import sys
app = QApplication(sys.argv)
mw = MainWindow()
mw.setWindowTitle("Tree View Selections")
mw.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Page List
▼
Friday, January 27, 2012
Qt 4.8 Model/View Tutorial - Part 7
The following code is based on Qt 4.8 Model/View Tutorial - 3.2 Working with Selections.