#!/usr/bin/python3 from PyQt6.QtWidgets import QPlainTextEdit class BinaryTextEdit(QPlainTextEdit): # rewrite QPlainTextEdit.keyPressEvent because it has no .setValidator() def keyPressEvent(self, event): allowed_keys = {"", "0", "1"} if event.text() in allowed_keys: cursor = self.textCursor() pos = cursor.position() if not (pos + 1) % 9 == 0 or event.text() in {"", None}: # dont overwrite the separator character super().keyPressEvent(event) # skip over the separator character when the cursor is before it. if (pos + 2) % 9 == 0 and not event.text() in {"", None}: cursor.setPosition(pos + 2) self.setTextCursor(cursor) else: event.ignore()