Quantcast
Channel: QtWebEngine
Viewing all articles
Browse latest Browse all 13965

QTreeView with custom items

$
0
0
Hello, I’m writing my first Qt application with PySide and am having some trouble creating a custom tree view. I’d like to list my own data in one column. Each item must have text with tooltip, different text color, different background color, icons with actions and tooltip. The default tree works. I have view: class TreeView(PySide.QtGui.QTreeView): and model: class TreeModel(PySide.QtCore.QAbstractItemModel): How can I add different icons to my items? Here is my example: import sys from PySide import QtGui, QtCore   class MyData():     def __init__(self, txt, parent=None):         self.txt = txt         self.parent = parent         self.child = []         self.icon = None         self.index = None       def position(self):         position = 0         if self.parent is not None:             count = 0             children = self.parent.child             for child in children:                 if child == self:                     position = count                     break                 count += 1         return position       @staticmethod     def init():         root = MyData("root")         for i in range(0, 2):             child1 = MyData("child %i" % (i), root)             root.child.append(child1)             for x in range(0, 2):                 child2 = MyData("child %i %i" % (i, x), child1)                 child1.child.append(child2)                         return root     class TreeModel(QtCore.QAbstractItemModel):     def __init__(self, tree):         super(TreeModel, self).__init__()         self.__tree = tree         self.__current = tree       def flags(self, index):         flag = QtCore.Qt.ItemIsEnabled         if index.isValid():             flag |= QtCore.Qt.ItemIsSelectable \                  | QtCore.Qt.ItemIsUserCheckable \                  | QtCore.Qt.ItemIsEditable \                  | QtCore.Qt.ItemIsDragEnabled \                  | QtCore.Qt.ItemIsDropEnabled         return flag       def index(self, row, column, parent=QtCore.QModelIndex()):         node = QtCore.QModelIndex()         if parent.isValid():             nodeS = parent.internalPointer()             nodeX = nodeS.child[row]             node = self.__createIndex(row, column, nodeX)         else:             node = self.__createIndex(row, column, self.__tree)         return node       def parent(self, index):         node = QtCore.QModelIndex()         if index.isValid():             nodeS = index.internalPointer()             parent = nodeS.parent             if parent is not None:                 node = self.__createIndex(parent.position(), 0, parent)         return node       def rowCount(self, index=QtCore.QModelIndex()):         count = 1         node = index.internalPointer()         if node is not None:             count = len(node.child)         return count       def columnCount(self, index=QtCore.QModelIndex()):         return 1       def data(self, index, role=QtCore.Qt.DisplayRole):         data = None         if role == QtCore.Qt.DisplayRole or role == QtCore.Qt.EditRole:             node = index.internalPointer()             data = node.txt         if role == QtCore.Qt.ToolTipRole:             node = index.internalPointer()             data = "ToolTip " + node.txt         if role == QtCore.Qt.DecorationRole:             data = QtGui.QIcon("icon.png")         return data       def setData(self, index, value, role=QtCore.Qt.DisplayRole):         result = True         if role == QtCore.Qt.EditRole and value != "":             node = index.internalPointer()             node.text = value             result = True         return result       def __createIndex(self, row, column, node):         if node.index == None:             index = self.createIndex(row, column, node)             node.index = index             icon = QtGui.QIcon("icon.png")             b = self.setData(index, icon, QtCore.Qt.DecorationRole)             b = self.setData(index, "ToolTip "+node.txt, QtCore.Qt.ToolTipRole)         return node.index     class TreeView(QtGui.QTreeView):     def __init__(self, model, parent=None):         super(TreeView, self).__init__(parent)         self.setModel(model)         self.setCurrentIndex(model.index(0, 0))   class MyTree(QtGui.QMainWindow):     def __init__(self, parent=None):         super(MyTree, self).__init__(parent)         data = MyData.init()         treeModel = TreeModel(data)         treeView = TreeView(treeModel)         self.setCentralWidget(treeView)   def main():     app = QtGui.QApplication(sys.argv)     form = MyTree()     form.show()     app.exec_()   if __name__ == '__main__':     main()

Viewing all articles
Browse latest Browse all 13965

Trending Articles