Guest User

Attempted port to Python3/PySide2/Qt5 of https://stackoverflow.com/a/34625345/673852

a guest
Nov 14th, 2020
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.46 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import sys
  3. from PySide2 import QtGui, QtCore, QtWidgets
  4.  
  5. class SimpleTree(QtWidgets.QTreeView):
  6.     def __init__(self, parent = None):    
  7.         QtWidgets.QTreeView.__init__(self, parent)
  8.         self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
  9.         self.setGeometry(500,200, 400, 300)  
  10.         self.setUniformRowHeights(False) #optimize: but for word wrap, we don't want this!
  11.         print("uniform heights in tree?", self.uniformRowHeights())
  12.         self.model = QtGui.QStandardItemModel()
  13.         self.model.setHorizontalHeaderLabels(['Task', 'Description'])
  14.         self.setModel(self.model)
  15.         self.rootItem = self.model.invisibleRootItem()
  16.         item0 = [QtGui.QStandardItem('Sneeze'), QtGui.QStandardItem('You have been blocked up')]
  17.         item00 = [QtGui.QStandardItem('Tickle nose, this is a very long entry. Row should resize.'), QtGui.QStandardItem('Key first step')]
  18.         item1 = [QtGui.QStandardItem('<b>Get a job</b>'), QtGui.QStandardItem('Do not blow it')]
  19.         self.rootItem.appendRow(item0)
  20.         item0[0].appendRow(item00)
  21.         self.rootItem.appendRow(item1)
  22.         self.setColumnWidth(0,150)
  23.         self.expandAll()
  24.         self.setWordWrap(True)
  25.         self.setItemDelegate(ItemWordWrap(self))
  26.  
  27. class ItemWordWrap(QtWidgets.QStyledItemDelegate):
  28.     def __init__(self, parent=None):
  29.         QtWidgets.QStyledItemDelegate.__init__(self, parent)
  30.         self.parent = parent
  31.     def paint(self, painter, option, index):
  32.         text = index.model().data(index)
  33.         document = QtGui.QTextDocument() # #print "dir(document)", dir(document)
  34.         document.setHtml(text)      
  35.         document.setTextWidth(option.rect.width())  #keeps text from spilling over into adjacent rect
  36.         painter.save()
  37.         painter.translate(option.rect.x(), option.rect.y())
  38.         document.drawContents(painter)  #draw the document with the painter
  39.         painter.restore()
  40.     def sizeHint(self, option, index):
  41.         #Size should depend on number of lines wrapped
  42.         text = index.model().data(index)
  43.         document = QtGui.QTextDocument()
  44.         document.setHtml(text)
  45.         document.setTextWidth(option.rect.width())  
  46.         return QtCore.QSize(document.idealWidth() + 10,  document.size().height())      
  47.  
  48. def main():
  49.     app = QtWidgets.QApplication(sys.argv)
  50.     myTree = SimpleTree()
  51.     myTree.show()
  52.     sys.exit(app.exec_())
  53.    
  54. if __name__ == "__main__":
  55.     main()
Advertisement
Add Comment
Please, Sign In to add comment