Как переопределить событие и передать ему аргумент с помощью PySide - PullRequest
0 голосов
/ 24 февраля 2019

Я отчаянно пытаюсь получить ответ на очень простой вопрос.Итак, у меня есть основной код, представляющий собой пользовательский интерфейс с QTextEdit, и я хочу ограничить количество символов до 140. На мой взгляд, лучшим способом было бы переопределить функции keyPressEvent и KeyReleaseEvent.

Для этого я создаю класс с моим пользовательским виджетом редактирования текста:

class CustomTextEdit(QtWidgets.QTextEdit):
   def keyPressEvent(self, event, text):
       if len(text) > 140:
           return
       else:
           self.setText(text)

Мне здесь не нужно событие.Мне нужно только передать аргумент, который будет содержать текст, который уже написан в текстовом редакторе.Однако, когда я пытаюсь создать QEditText и передать текущий текст, сказав в своем основном пользовательском интерфейсе:

self.text_edit = QtWidgets.CustomTextEdit()
self.text_edit.keyPressEvent(self.text_edit.toPlainText())

, программа понимает его так, как будто я передаю событие, которое является QKeyEvent иконечно говорит что у него нет длины.

Что я делаю не так?Как передать событие и аргумент?Это вообще возможно?

Я читаю тонны ответов на похожий вопрос, но все равно не получаю ответа.Пожалуйста, помогите!

1 Ответ

0 голосов
/ 24 февраля 2019

keyPressEvent может принимать только два аргумента: self и event (названы по вашему желанию).Чтобы получить доступ к тексту, уже написанному в редакторе, вы можете использовать self.toPlainText() до принятия события с event.accept().Итак, для вашего случая ограничить количество символов до 140, я бы предложил этот обходной путь:

class CustomTextEdit(QWidgets.QTextEdit):
    def keyPressEvent(self, event):
        current_text = self.toPlainText()
        super().keyPressEvent(event)  # event.accept() is not working for me for some reasons
        if len(self.toPlainText()) > 140:
            self.setText(current_text)
...