[PySide] QAbstractTextDocumentLayout.PaintContext missing `selections` attribute.
Grégory Pijat
pijat.gregory at gmail.com
Fri Mar 31 21:47:41 CEST 2023
Hey, it's been a while since I send this question, how can we get this
resolved ? (At least in PySide6 but would be awesome if backported to
PySide2, as a Maya develloper I have no choice than using PySide2 for now.)
Thank you ! :)
Le mer. 25 janv. 2023 à 21:45, Grégory Pijat <pijat.gregory at gmail.com> a
écrit :
> Hey pyside mailing list, it's my first time participating in a mailing
> list, I hope I'm at the right place for my question/bug report.
>
> *What I'm doing:*
> I'm working on a custom widget to display an immense amount of words
> (QPlainTextEdit is too slow for what I need) so here's how I'm doing it:
> - Custom Widget
> - QTextDocument
> - QTextDocument.draw with a QAbstractTextDocumentLayout.PaintContext
>
> *My Problem:*
> I need to implement selection, so I'm calculating which part of the text
> is selected by comparing press and release position in the document. This
> works fine, I can retrieve the selected text.
> BUT, when I want to highlight the selection using the `selections`
> argument that should be available in
> the QAbstractTextDocumentLayout.PaintContext instance, it fails, this seems
> to be missing.
>
> I tested this in PyQt too and it works fine, it just looks like it's
> missing from PySide. (I'm using PySide2).
>
> Here's my code:
> ```
>
> import sysfrom PyQt5 import QtWidgets, QtGui, QtCore
>
> LOREM_IPSUM = \'''
> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
> Morbi dictum ligula mi, ut venenatis urna molestie et.
> Phasellus velit nunc, consequat nec felis ut, egestas pulvinar mi.
> In hac habitasse platea dictumst.
> Mauris eget faucibus est, vitae suscipit neque.
> Curabitur elementum tellus nec mauris rutrum laoreet.
> Duis condimentum consequat dui sit amet semper.
> Nam varius aliquet nibh, sit amet molestie ex scelerisque a.
> Donec sodales, sapien non consequat luctus, ante quam pretium nibh, sed egestas augue nunc et augue.
> '''
>
> class TextEdit(QtWidgets.QWidget):
> def __init__(self, document, parent=None):
> super(TextEdit, self).__init__(parent=None)
>
> self._document = document
> self._selectionStart = 0
> self._selectionEnd = 0
>
> self.cur = QtGui.QTextCursor(self._document)
>
> self._selectionFormat = QtGui.QTextCharFormat()
> self._selectionFormat.setBackground(QtGui.QColor('#2B4A69'))
>
> def paintEvent(self, event):
> painter = QtGui.QPainter(self)
>
> # This is the problematic area
> ctx = QtGui.QAbstractTextDocumentLayout.PaintContext()
> selection = QtGui.QAbstractTextDocumentLayout.Selection()
> selection.cursor = self.cur
> selection.format = self._selectionFormat
> # print(ctx.selections) # Works in PyQt5, not PySide2 where the attribute is missing.
> ctx.selections = [selection]
>
> self._document.documentLayout().draw(painter, ctx)
>
> def mousePressEvent(self, event):
> start = end = self._document.documentLayout().hitTest(event.pos(), QtCore.Qt.FuzzyHit)
> self.cur.setPosition(start)
> self.cur.setPosition(end, QtGui.QTextCursor.KeepAnchor)
>
> self.update()
>
> def mouseMoveEvent(self, event):
> end = self._document.documentLayout().hitTest(event.pos(), QtCore.Qt.FuzzyHit)
> self.cur.setPosition(end, QtGui.QTextCursor.KeepAnchor)
>
> self.update()
>
>
> if __name__ == "__main__":
> if QtWidgets.QApplication.instance() is not None:
> app = QtWidgets.QApplication.instance()
> else:
> app = QtWidgets.QApplication([])
>
> doc = QtGui.QTextDocument()
> doc.setPlainText(LOREM_IPSUM)
>
> widget = TextEdit(doc)
> widget.show()
>
> sys.exit(app.exec_())```
>
> I've asked this on StackOverflow but I was told I should try in the mailing list, so here am I.
> -> https://stackoverflow.com/questions/75077964/qabstracttextdocumentlayout-paintcontext-works-in-pyqt5-but-not-pyside2?noredirect=1#comment132502605_75077964
>
> Looks like someone opened a bug report but was ignored:
> -> https://bugreports.qt.io/browse/PYSIDE-1220
> *Does anyone knows something about this ? Is it normal ? Is there a workaround ?
> If it's a real bug, I guess it won't be fixed for PySide2, only in a future release of PySide6 ? *
>
> Thank you ! :)
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/pyside/attachments/20230331/ce82576a/attachment-0001.htm>
More information about the PySide
mailing list