Как предотвратить функционирование ключа внутри QPlainTextEdit - PullRequest
0 голосов
/ 06 мая 2018

Предположим, у меня есть текстовое редактирование в моем графическом интерфейсе, и я нажимаю клавишу типа a , тогда я не должен писать 'a' в моем текстовом редакторе.

Я могу добавить свою собственную функцию к событию нажатия клавиши, но не могу помешать ей выполнить механизм по умолчанию.

Помогите мне с этим, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы можете запретить поведение по умолчанию keyPressEvent для определенного ключа, например:

class CodeEditor(QtWidgets.QPlainTextEdit):
    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_A:
            # do nothing
            event.accept()
        else:
            # do the default
            super().keyPressEvent(event)
0 голосов
/ 06 мая 2018

Вы можете установить eventFilter и запретить передачу ключа.

import sys

from PyQt5.QtWidgets import QApplication, QPlainTextEdit
from PyQt5.QtCore import QObject, Qt, QEvent

class Helper(QObject):
    def disable_key(self, w, key):
        self.m_w = w
        self.m_w.installEventFilter(self)

        self.m_key = key 
    def eventFilter(self, obj, event):
        if obj == self.m_w and event.type() == QEvent.KeyPress:
            if event.key() == self.m_key:
                return True
        return QObject.eventFilter(self, obj, event)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    helper = Helper()
    view = QPlainTextEdit()
    helper.disable_key(view, Qt.Key_A)
    view.show()

    sys.exit(app.exec_())

или буквой:

import sys

from PyQt5.QtWidgets import QApplication, QPlainTextEdit
from PyQt5.QtCore import QObject, Qt, QEvent

class Helper(QObject):
    def disable_key(self, w, letter):
        self.m_w = w
        self.m_w.installEventFilter(self)

        self.m_letter = letter 
    def eventFilter(self, obj, event):
        if obj == self.m_w and event.type() == QEvent.KeyPress:
            if event.text() == self.m_letter:
                return True
        return QObject.eventFilter(self, obj, event)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    helper = Helper()
    view = QPlainTextEdit()
    helper.disable_key(view, "a")
    view.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...