Grouping user edits in QPlainTextEdit widget

john at sturtz.org john at sturtz.org
Tue Jun 2 04:34:39 BST 2026


<Grrr.  Forgot to attach the sample code ...>
On Jun 1, 2026, 10:33 PM -0500, john at sturtz.org, wrote:

> Hi again all.
>
> I have a QPlainTextEdit widget.  I place the cursor in the middle of a line, type a few characters and then hit [Enter].  Now if I want to undo that edit, it takes two .undo() calls -- the first removes the newline, the second the typed text.
>
> I'd like to consider the entire edit one group, which a single .undo() undoes.
>
> My ostensible solution was to call .beginEditBlock() prior to the edit, then .endEditBlock() after the edit.  And that does in fact work -- a single .undo() call then undoes the entire edit.  Unfortunately, after the .beginEditBlock() call, while the edit is occurring, the widget doesn't update.
>
> ------
> Sample code attached.  To demonstrate:
>
>
> 1. Place cursor somewhere in the middle of the line.  Type a few characters and hit [Enter].
> Type [ctrl+U] to manually call .undo().  First time removes the newline, second time removes the typed characters.
>
> 2. Place cursor somewhere (else) on the line.
> Type [alt+B] to call .beginEditBlock().
> Type a few characters and hit [Enter].  The characters overtype, and the widget doesn't update.
> Type [alt+E] to call .endEditBlock().  Now the widget updates.
> A single [ctrl+U] undoes the entire edit.
>
>
> ------
> Are .beginEditBlock()/.endEditBlock() only really intended to be used for programmatic editing of the text and not user interaction?
>
> Thanks!
>
> /John
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20260601/db92fd9a/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.py
Type: application/octet-stream
Size: 1854 bytes
Desc: not available
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20260601/db92fd9a/attachment.obj>


More information about the PyQt mailing list