On 4/10/06, Bert Rodiers <[EMAIL PROTECTED]> wrote:
> On 4/9/06, Andreas Pakulat <[EMAIL PROTECTED]> wrote:
>
> > Provide a minimal compilable example that demonstrates your problem. We
> > can't tell what's going on from the snippet above, at least I can't.
> >
>
> Ok, I'll do that (tomorrow). I'll have to reduce the amount of code.

In attachment an example for the first problem (the rest will
follow...). The tree should be filled in when I push the button. If I
put a breakpoint in the __init__ of class TreeModel it works,
otherwise it doesn't.

Bert
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'untitled.ui'
#
# Created: Mon Apr 10 12:27:30 2006
#      by: PyQt4 UI code generator vsnapshot-20060407
#
# WARNING! All changes made in this file will be lost!

import sys
from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        
MainWindow.resize(QtCore.QSize(QtCore.QRect(0,0,800,600).size()).expandedTo(MainWindow.minimumSizeHint()))
        
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        
        self.treeView = QtGui.QTreeView(self.centralwidget)
        self.treeView.setGeometry(QtCore.QRect(170,180,120,80))
        self.treeView.setObjectName("treeView")
        
        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(320,80,75,24))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setGeometry(QtCore.QRect(0,581,800,19))
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        
QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL("clicked()"),self.test)
    
    def tr(self, string):
        return QtGui.QApplication.translate("MainWindow", string, None, 
QtGui.QApplication.UnicodeUTF8)
    
    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(self.tr("MainWindow"))
        self.pushButton.setText(self.tr("PushButton"))
    def test(self):
        model = TreeModel()
        self.treeView.setModel(model)



class TreeItem:
        def __init__(self, label, parent = None):
                self.parentItem = parent
                self.children = []
                self.label = label

        def child(self, row):
                return self.children[row]

        def childCount(self):
                return len(self.children)

        def displayLabel(self):
                return self.label

        def parent(self):
                return self.parentItem

        def row(self):
                if self.parentItem:
                        return self.parentItem.children.index(self)
                return 0
        def dictionaryOfAllTreeElements(self):
                dictionary = {}
                for child in self.children:
                        dictionary[id(child)] = child
                        dictionary.update(child.dictionaryOfAllTreeElements())
                return dictionary
        
        def addChild(self, label):
                self.children.append(TreeItem(label, self))



class TreeModel(QtCore.QAbstractItemModel):
        def __init__(self, parent=None):
                QtCore.QAbstractItemModel.__init__(self, parent)


                self.rootItem = TreeItem('title')
                self.rootItem.addChild('1')
                self.rootItem.addChild('2')
                self.rootItem.children[0].addChild('3')
                self.rootItem.children[0].addChild('4')
                self.object_dict = self.rootItem.dictionaryOfAllTreeElements()
        
        def columnCount(self, parent):
                return 1
        
        def data(self, index, role):
                if not index.isValid():
                        return QtCore.QVariant()

                if role != QtCore.Qt.DisplayRole:
                        return QtCore.QVariant()

                item = self.object_dict[index.internalId()]
                label = item.displayLabel()
                
                assert(index.column() == 0)
                return QtCore.QVariant(label)

        def flags(self, index):
                if not index.isValid():
                        return QtCore.Qt.ItemIsEnabled

                return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

        def index(self, row, column, parent):
                if not parent.isValid():
                        parentItem = self.rootItem
                else:
                        parentItem = self.object_dict[parent.internalId()]

                childItem = parentItem.child(row)
                if childItem:
                        return self.createIndex(row, column, id(childItem))
                else:
                        return QtCore.QModelIndex()

        def parent(self, index):
                if not index.isValid():
                        return QtCore.QModelIndex()

                childItem = self.object_dict[index.internalId()]
                parentItem = childItem.parent()

                if parentItem == self.rootItem:
                        return QtCore.QModelIndex()

                return self.createIndex(parentItem.row(), 0, id(parentItem))

        def rowCount(self, parent):
                if not parent.isValid():
                        parentItem = self.rootItem
                else:
                        parentItem = self.object_dict[parent.internalId()]

                return parentItem.childCount()


if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        mainWindow = QtGui.QMainWindow()
        windowClass = Ui_MainWindow()
        windowClass.setupUi(mainWindow)
        app.setActiveWindow(mainWindow)
        mainWindow.show()
        app.exec_()     

_______________________________________________
PyKDE mailing list    [email protected]
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Reply via email to